JavaScript:确定哪个控件导致回发

时间:2011-04-08 12:03:17

标签: javascript asp.net onclick postback submit

我目前正在使用ASP.NET 3.5开发一个网站。在页面上有一些情况我不希望特定控件将导致回发到服务器。我编写了一个函数来返回false,如果满足该条件,将在onsubmit-Event发生时调用。但我不知何故需要确定哪个控件将导致回发,因为只有在特定条件下此特定控件导致回发时才应取消回发。怎么可能这样做?

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

请参阅:

  

ASP.NET如何识别控件   负责处理回发?   当没有引用的控件时   请求机构实施   IPostBackEventHandler界面,   页面类查找__EVENTTARGET   隐藏的字段,如果有的话。的内容   该字段被假定为ID   导致回发的控件。   如果此控件实现了   IPostBackEventHandler界面,   <{1}}方法被调用。

这是来自这里 - The Client Side of ASP.NET Pages

所以在客户端RaisePostbackEvent就是你所需要的。在服务器端,您可以覆盖Page.RaisePostBackEvent方法(这是受保护的方法,因此您可以从System.Web.UI.Page类继承):

__EVENTTARGET

或执行相同操作而不继承:

protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl, 
                                           string eventArgument)
{
    // sourceControl is a control that caused postback
    base.RaisePostBackEvent(sourceControl, eventArgument);
}

编辑:关于作者对我的回答的评论:如果var controlName = page.Request.Params["__EVENTTARGET"]; Control postbackControl = null; if (!string.IsnullOrEmpty(controlName)) { postbackControl = this.Page.FindControl(controlName); } 值为空字符串,那么在__EVENTTARGET中设置之前,您似乎已获得此值功能。因此,解决方法可能是覆盖 __doPostBack函数或类似方式;你可以在这个SO quesion找到一个例子。

答案 1 :(得分:0)

您可以使用ScriptManager.GetCurrent().AsyncPostBackSourceElementID查找导致回发到页面的控件。

有关MSDN的更多详细信息,但它可以在以下情况下使用:

  • 来自控件的回发 在UpdatePanel控件中 ChildrenAsTriggers属性设置为 true(默认值)。

  • 来自控件的回发,该控件是UpdatePanel控件的触发器。

  • 通过调用注册的控件回发 RegisterAsyncPostBackControl方法 ScriptManager控件。

我不知道您是否正在使用UpdatePanels,但似乎这是我能想到的唯一情况,您需要知道哪个控件导致回发。