2012-08-16 45 views
3

我有一個表格,其中<asp:UpdatePanel>和2 <asp:button>控件用於保存和重置表單。我使用javascript __doPostBack()函數觸發<asp:UpdatePanel>函數,並在面板應該重置時將值傳遞給__EVENTARGUMENT。通過清除__eventArgument

Request.Params.Get("__EVENTARGUMENT") 

我隱藏檢查上的PreRender一個值,以確定是否復位形式與它的原始數據或不。

如果面板先前被重置,__EVENTARGUMENT在按下保存按鈕時似乎依然存在,因此在回發時重新設置表單。

我曾嘗試使用以清除Page_Load__EVENTARGUMENT

Request.Params.Clear(); 

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

但集合爲只讀。我在另一篇文章中,使用javascript:

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

,但這似乎並沒有任何工作。有任何想法嗎?

回答

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設置的值,因此是代碼隱藏引用的內容。

+1

我正要自殺,很好的解決方案! – 2016-11-02 12:32:27