确定是否以及在.NET中使用JavaScript的pageLoad()中发生了部分回发

确定是否以及在.NET中使用JavaScript的pageLoad()中发生了部分回发,javascript,.net,ajax,postback,Javascript,.net,Ajax,Postback,据我所知,使用ASP.NET AJAX进行的部分页面更新会导致调用JavaScript pageLoad()事件处理程序 我的问题是:在JavaScript中是否有一种通用的方法可以从pageLoad()函数中确定 i) 是否回发是部分页面更新 ii)如果是,更新了哪个面板 我的应用程序使用.NET UpdatePanels和Telerik面板的组合。我正在寻找一种通用(最好是JavaScript)解决方案,它不需要我为每个面板指定唯一的客户端回调函数,也不需要在每个回发事件处理程序中设置一些标

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

我的问题是:在JavaScript中是否有一种通用的方法可以从pageLoad()函数中确定

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

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


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

要确定回发是否是部分更新,您可以使用
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
并对其进行分析。下面是一个这样做的示例:

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;
}

参考文献:


哦,太好了!有两件事。。。我不得不将Contains()中的字符“|”改为字符串“|”,在.Split()之后,我取了前半部分[0],它给出了更新的面板,而不是[1],后者提供了导致更新的控件。另外,为了其他读卡器的利益。。。为了在部分更新后向javascript提供结果,我必须在单独的UpdatePanel中放置一些隐藏字段,并设置其属性:UpdateMode=“Always”。这会导致在任何回发时更新该面板的内容,即使它是单独updatepanel上的部分回发。然后,我的javascript可以读取隐藏字段的值,以确定它是否是部分回发,并获取已更新面板的ID。现在一切都好了,谢谢!:-)谢谢伊恩给了我一个很好的答案。这正是我需要的代码。许多答案给出一两句话,然后引导提问者找到参考资料。谢谢你简明扼要地解释了细节+1这根本不能回答这个问题。问题是“是否有一种通用的方法可以在JavaScript中从pageLoad()函数中确定…”(突出显示我的方法)。但这个被接受的答案只是描述了服务器端的一种方式。@DonP你是对的,但这仍然让你有能力做到这一点。如果您查看上面的评论,Bumpy提到了如何完成所需的内容-服务器端是确定回发原因的好地方,然后它可以设置隐藏值(或其他内容)供JS读取。