Sorry for the wordy title, but it seemed the best way to describe the issue.
Basically, we have a WebDropDown inside an update panel, whose current value we want to change depending on what WebTab is loaded. We've tried handling the WebTab SelectedIndexChanged event to modify this value, but the update panel doesn't get an Async postback triggered. This is after adding the WebTab as an async postback trigger inside the UpdatePanel too.
I finally got it to work by calling __doPostBack via clicking a button on the ClientEvents-SelectedIndexChanged event, but now I'm presented with this error everytime I change a tab:
Error: Sys.ArgumentUndefinedException: Value cannot be undefined.Parameter name: type
Any ideas as to what is causing this issue?
Hello Alex,
Thank you for posting in our community.
I followed the described scenario but I was unable to reproduce the behavior that you are describing. I am attaching the sample project I used to test this. Could you please try running it on your side; whether or not it works correctly may help indicate the nature of this issue.
If this sample is not an accurate demonstration of what you are trying to achieve please feel free to modify it and send it back to me in order to reproduce the issue.
Please let me know if you have any additional questions regarding this matter.
Hi again,
Thanks for the example file. However, the WebTab has AutoPostBackFlags set to on, as opposed to Async. Setting it to Async stops it from working. I suspect this is because the updatepanel requires a proper post back to be triggered?
This is why we used JS in our scenario, to trigger an Async postback on the client event SelectedIndexChanged, but this is the point where we run into errors. Looking online suggests we might have incorrexy AJAX assemblies, but all looks in place from what I can see
Main problem is that we need to have AJAX enabled, otherwise the WebDataGridView loses it's content after loading another tab. The problem with having the client side selectedindexchanged is that it seems to do the postback before the server side, which results in no data being loaded. Is there any way to say in the javascript, "Wait until the server side SelectedIndexChanged event has finished doing it's processing, THEN do some stuff"?
Currently there Is no way to achieve the mention events order, The reason is that the client side is the one that requests some job to be done on the server. This is the reason why client side events are fired before the server side events.
However, I modified the sample project in order to achieve only async postbacks . What I am doing is to call __doPostBack for the WebDropDown using __doPostBacks function`s parameters. With setting WebDropown as __EVENTTARGET I am causing async postback for the WebdropDown respectively for the updatePanel. Some further reference about __doPostBack function and its parameters could be found at:
http://aspalliance.com/articleViewer.aspx?aId=895&pId=-1
Now in my scenario async postback is triggered when ActiveTabChange event is fired and WebDropDown`s selected index is changed. For example:
Client side: <script type="text/javascript" id="igClientScript1"> function causePostBack() { __doPostBack('WebDropDown1', ' '); } function WebTab1_ActiveTabChange(sender, eventArgs) { causePostBack(); } </script> Server side: protected void WebTab1_SelectedIndexChanged(object sender, TabSelectedIndexChangedEventArgs e) { int index = e.NewIndex; this.WebDropDown1.SelectedItemIndex = index; }
Client side:
<script type="text/javascript" id="igClientScript1">
function causePostBack() {
__doPostBack('WebDropDown1', ' ');
}
function WebTab1_ActiveTabChange(sender, eventArgs) {
causePostBack();
</script>
Server side:
protected void WebTab1_SelectedIndexChanged(object sender, TabSelectedIndexChangedEventArgs e)
{
int index = e.NewIndex;
this.WebDropDown1.SelectedItemIndex = index;
I hope you find this information helpful.
Please let me know if you need any further assistance with this matter.
Again, I can't thank you enough!
I think I've drilled down to the root of the issue. Having a WebDataGrid in one of the ContentTabs seems to be causing the issue.
Even just putting an empty WebDataGrid into a ContentTabItem, then clicking that tab, causes the following error:
Line: 4620Error: Sys.ArgumentUndefinedException: Value cannot be undefined.Parameter name: type
Again, this WebDataGrid is completely empty, and has been dragged and dropped from the toolbox and nothing else.
Without the WebDataGrid, everything works fine. Is this an issue with the WebDataGrid, or is there some underlying problem in our code? Again, the given WebTab options work fine without the WebDataGrid, so I'm assuming it's something wrong with how the WebDataGrid is set up.
Thanks again for all your help!
Thank you for the detailed replies. About your question related to newly added WebDataGrid, it should not be related to the mentioned issue, especially if it is empty and haven't set anything to it. Can I ask you, do you use any 3rd party software components like Ajax Control Toolkit? Sometimes this is messing up with our controls and cause issues similar to this one.
There are some existing methods that can overcome this issue, like:
- Set debug=false in web.config (http://bjornstad.ws/2010/10/sys-argumentundefinedexception-value-cannot-be-undefined/)
- Avoid using Clear() function, this is related mostly for WebHierarchicalDataGrid and cannot be related to your issue (http://codecorner.galanter.net/category/javascript/page/4/)
- Check your ScriptManager/WebScriptManager definition (http://stackoverflow.com/questions/14793415/ajax-toolkit-not-working)
- Clear your browser cache
Looking forward to hearing from you.
Ended up having a fiddle around and got it to work how I wanted (looks like it was a combination of incorrect properties and controls, but what they were I'm not too sure!). The posts here regarding updating a webdropdown from a webtab helped immensely however!
I am glad that you've managed to resolve this issue.
Thank you for using our controls.