清除__eventArgument

时间:2012-08-16 10:28:04

标签: c# javascript updatepanel

我有一个包含<asp:UpdatePanel>和2 <asp:button>控件的表单,用于保存和重置表单。我正在使用javascript <asp:UpdatePanel>函数触发__doPostBack(),如果要重置面板,则在__EVENTARGUMENT中传递值。

我的代码隐藏通过

检查PreRender上的值
Request.Params.Get("__EVENTARGUMENT")

确定是否使用原始数据重置表单。

如果面板先前已重置,则按下保存按钮时__EVENTARGUMENT似乎会停留,因此在回发时会再次重置我的表单。

我尝试使用以下内容清除__EVENTARGUMENT中的Page_Load

Request.Params.Clear();

Request.Params.Set("__EVENTARGUMENT", "");

但该集合是只读的。我在另一篇文章中找到了javascript:

window.document.getElementById('__EVENTARGUMENT').value = '';

但这似乎也不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

刚想出来。

解决方案

__EVENTARGUMENT可以通过以下方式清除:

theForm.__EVENTARGUMENT.value = '';

如果每次加载<asp:UpdatePanel>时都需要执行此操作,请将以下放入您的UpdatePanel中:

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


<强>原因:

大多数.Net控件使用javascript __doPostBack函数来处理回发,因此以下代码会在生成时自动添加到页面中:

<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>

这是为__EVENTARGUMENT设置的值,因此从代码隐藏中引用了什么。