4

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

我的代码隐藏通过检查 PreRender 上的值

Request.Params.Get("__EVENTARGUMENT")

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

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

我试图清除使用__EVENTARGUMENT中的Page_Load

Request.Params.Clear();

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

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

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

但这似乎也不起作用。有任何想法吗?

4

1 回答 1

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,因此是从代码隐藏中引用的内容。

于 2012-08-16T12:45:24.570 回答