我目前正在開發一個使用ASP.NET 3.5的網站。在頁面上有一些情況我不希望特定的控件會導致回發到服務器。我寫了一個函數來返回false,如果滿足這個條件,當onsubmit事件發生時會被調用。但我不知何故需要確定哪個控件會導致回發,因爲只有在特定控件在特定條件下導致回發時才應該取消回發。如何做到這一點?JavaScript:確定哪個控件導致回發
謝謝你的時間。
我目前正在開發一個使用ASP.NET 3.5的網站。在頁面上有一些情況我不希望特定的控件會導致回發到服務器。我寫了一個函數來返回false,如果滿足這個條件,當onsubmit事件發生時會被調用。但我不知何故需要確定哪個控件會導致回發,因爲只有在特定控件在特定條件下導致回發時才應該取消回發。如何做到這一點?JavaScript:確定哪個控件導致回發
謝謝你的時間。
參見:
如何
ASP.NET
識別負責處理回發的控制 ? 當 請求體中沒有引用的控件實現接口時,頁類會查找隱藏字段(如果有)。 該字段的內容被假定爲 的ID
的引起回發的控制。 如果此控件實現接口,則會調用RaisePostbackEvent
方法。
這是從這裏 - The Client Side of ASP.NET Pages。
所以在客戶端__EVENTTARGET
是你所需要的。在服務器端,你既可以重寫Page.RaisePostBackEvent
方法(這是受保護的方法,這樣你就可以從System.Web.UI.Page
類繼承):
protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl,
string eventArgument)
{
// sourceControl is a control that caused postback
base.RaisePostBackEvent(sourceControl, eventArgument);
}
或不inherining執行相同的:
var controlName = page.Request.Params["__EVENTTARGET"];
Control postbackControl = null;
if (!string.IsnullOrEmpty(controlName))
{
postbackControl = this.Page.FindControl(controlName);
}
編輯:關於作者對我的回答的評論:如果__EVENTTARGET
值是一個空字符串,看起來你已經在__doPostBack
函數中設置了該值。所以解決方法可能在覆蓋__doPostBack
功能或類似的方式;你可以在這個SO quesion找到一個例子。
您可能可以使用ScriptManager.GetCurrent().AsyncPostBackSourceElementID
來找到導致回發到頁面的控件。在MSDN
更多細節,但它會在這些情況下工作:
從是 UpdatePanel控件,其 ChildrenAsTriggers屬性設置爲 true(默認值)內的控制回發。
作爲UpdatePanel控件的觸發器的控件的回發。
通過調用ScriptManager控件的 RegisterAsyncPostBackControl方法 註冊的控件的回發。
我不知道,如果你使用的UpdatePanel,但它似乎有可能,因爲這是我能想到的,你就需要知道哪些控制導致回發的唯一情況。
你好,我不使用更新面板。我的情況是我的頁面上有一個DropDownList。每次選擇另一個項目時都會導致回發。如果選擇列表中的第一個值是因爲它是無效條目(僅供參考),並且選擇了一個值但已顯示相關信息,我想阻止該回發。 – chrinetr 2011-04-09 19:07:33
你好,查詢導致在服務器端回發的控件會太晚了,因爲我想防止回發。所以我試圖獲取處理事件_onsubmit_的隱藏字段___EVENTTARGET_的值,但其值始終是空字符串。 – chrinetr 2011-04-09 19:01:33
@Pratzelwurm,更新了我的回答 – Alex 2011-04-09 20:17:32
謝謝。你提供的鏈接幫了我很多:) – chrinetr 2011-04-12 18:31:21