Clear __eventArgument

c#, javascript, updatepanel

Solution

Just figured this out.

The solution

The `__EVENTARGUMENT` can simply be cleared in the following way:

theForm.__EVENTARGUMENT.value = '';

If it is necessary to perform this action every time an `<asp:UpdatePanel>` loads, then put the following inside your UpdatePanel:

<script type="text/javascript">
    Sys.Application.add_load(function () {
        theForm.__EVENTARGUMENT.value = '';
    });
</script>

Reason:

The majority of .Net controls use the javascript `__doPostBack` function to handle postbacks, so the following code will automatically be added to the page when it is generated:

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form'];
if (!theForm) {
    theForm = document.form;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
    theForm.__EVENTTARGET.value = eventTarget;
    theForm.__EVENTARGUMENT.value = eventArgument;
    theForm.submit();
    }
}
//]]>
</script>

This is where the value is set for `__EVENTARGUMENT`, and therefore what is referenced from the codebehind.

Problem

I have a form with an `<asp:UpdatePanel>` and 2 `<asp:button>` controls to Save and Reset the form. I am triggering the `<asp:UpdatePanel>` using a javascript `__doPostBack()` function and passing a value in it's `__EVENTARGUMENT` if the panel should be reset. My codebehind checks for a value on PreRender via ``` Request.Params.Get("__EVENTARGUMENT") ``` to determine whether to reset the form with it's original data or not. If the panel was previously reset, the `__EVENTARGUMENT` seems to linger when the save button is pressed, therefore resetting my form again on postback. I have tried to clear the `__EVENTARGUMENT` in the `Page_Load` using: ``` Request.Params.Clear(); ``` and ``` Request.Params.Set("__EVENTARGUMENT", ""); ``` but the collection is read only. I found on another post, using javascript: ``` window.document.getElementById('__EVENTARGUMENT').value = ''; ``` but this doesn't seem to work either. Any ideas?

Original source