Clear __eventArgument

Clear __eventArgument

本文关键字:eventArgument Clear      更新时间:2023-09-26

我有一个带有<asp:UpdatePanel>和 2 个<asp:button>控件的表单来保存和重置表单。我正在使用 javascript __doPostBack()函数触发<asp:UpdatePanel>,并在其中传递一个值,__EVENTARGUMENT是否应该重置面板。

我的代码隐藏通过以下方式检查预渲染上的值

Request.Params.Get("__EVENTARGUMENT")

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

如果之前重置了面板,则按下保存按钮时__EVENTARGUMENT似乎会徘徊,因此在回发时再次重置我的表单。

我试图使用以下方法清除Page_Load中的__EVENTARGUMENT

Request.Params.Clear();

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

但集合是只读的。 我在另一篇文章中发现,使用 javascript:

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

但这似乎也行不通。有什么想法吗?

刚刚想通了。

解决方案

可以通过以下方式简单地清除__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设置值的地方,因此是从代码隐藏中引用的内容。