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