先决条件,我对事件冒泡很新。
我有一个带有gridview的页面,其中包含行中的按钮。单击该按钮时,它会触发OnCommand事件,一切都按预期工作。
<ItemTemplate>
<asp:Button ID="btnG" runat="server" OnCommand="btnG_Command" Text="View"/>
</ItemTemplate>
... (on the codebehind) ..
Protected Sub btnG_Command(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)
'Does some stuff
当我在母版页上添加一个文本框(带有验证器)和一个按钮时,现在当点击gridview中的按钮时,它会出于某种原因触发母版页中的验证器。
<asp:RequiredFieldValidator ID="ReqValidator" runat="server" ControlToValidate="txtTextbox" Display="Dynamic" ErrorMessage="Please enter a valid number."></asp:RequiredFieldValidator>
通过一些研究,我发现它与事件冒泡有关,因为gridview中的按钮控件使用OnCommand而不是OnClick。
我的问题是为什么它会在Master页面中关闭验证器?冒泡首先不应该通过GridView而不是Master页面?如何绕过验证器或事件冒泡,以便从内容页面触发正确的事件?
答案 0 :(得分:1)
您应该在母版页中向验证程序添加验证组。验证组允许您将页面上的验证控件组织为一组。每个验证组都可以独立于页面上的其他验证组执行验证。
通过将ValidationGroup
属性设置为要分组的所有控件的相同名称(字符串),可以创建验证组。您可以为验证组指定任何名称,但必须为该组的所有成员使用相同的名称
来源:https://msdn.microsoft.com/en-us/library/ms227424(v=vs.100).aspx
<asp:RequiredFieldValidator ID="ReqValidator" runat="server"
ControlToValidate="txtTextbox" Display="Dynamic"
ErrorMessage="Please enter a valid number."
ValidationGroup="MasterNumber"></asp:requiredfieldvalidator>