据我了解,使用ASP.NET AJAX进行部分页面更新会导致调用JavaScript pageLoad()事件处理程序。
我的问题:在pageLoad()函数中是否有一种通用的JavaScript确定方法…
i)回发是否是部分页面更新。
ii)如果是,则更新哪个面板。
我的应用程序使用.NET UpdatePanels和Telerik RadAjaxPanels的组合。我正在寻找一种通用(最好是JavaScript)解决方案,该解决方案不需要我为每个面板指定唯一的客户端回调函数,也不需要在每个回发事件处理程序中设置一些标志以将其自身标识给客户端。
要确定回发是否是部分更新,可以使用ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack。这是一个例子:
ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack
protected void Page_Load(object sender, EventArgs e) { if (Page.IsPostBack) { // get a reference to ScriptManager and check if we have a partial postback if (ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack) { // partial (asynchronous) postback occured // insert Ajax custom logic here } else { // regular full page postback occured // custom logic accordingly } } }
要获取导致回发的更新面板,您可以对其进行调查ScriptManager.GetCurrent(Page).UniqueID和分析。这是一个这样做的例子:
ScriptManager.GetCurrent(Page).UniqueID
public string GetAsyncPostBackControlID() { string smUniqueId = ScriptManager.GetCurrent(Page).UniqueID; string smFieldValue = Request.Form[smUniqueId]; if (!String.IsNullOrEmpty(smFieldValue) && smFieldValue.Contains("|")) { return smFieldValue.Split('|')[0]; } return String.Empty; }