5

据我了解,使用 ASP.NET AJAX 进行部分页面更新会导致调用 JavaScript pageLoad() 事件处理程序。

我的问题:是否有从 pageLoad() 函数中确定 JavaScript 的通用方法...

i) 回发是否是部分页面更新。

ii) 如果是,更新了哪个面板。

我的应用程序结合使用 .NET UpdatePanels 和 Telerik RadAjaxPanels。我正在寻找一种通用(最好是 JavaScript)解决方案,它不需要我为每个面板指定唯一的客户端回调函数,也不需要在每个回发事件处理程序中设置一些标志来向客户端标识自己。

4

1 回答 1

20

要确定回发是否是部分更新,您可以使用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                
        }
    }
}

要获取导致 PostBack 的更新面板,您可以查看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;
}

参考:

于 2013-04-09T04:17:16.753 回答