GridView中的按钮,OnCommand,事件气泡,母版页



前提条件是,我对事件冒泡还相当陌生。

我有一个网格视图的页面,它的行中有按钮。单击该按钮时,它会触发一个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

当我在母版页上添加了一个文本框(带有验证器)和一个按钮时,现在当单击网格视图中的按钮时,出于某种原因,它会在母版页面中触发验证器。

<asp:RequiredFieldValidator ID="ReqValidator" runat="server" ControlToValidate="txtTextbox" Display="Dynamic" ErrorMessage="Please enter a valid number."></asp:RequiredFieldValidator>

通过一些研究,我发现这与事件冒泡有关,因为网格视图中的按钮控件使用的是OnCommand而不是OnClick。

我的问题是,它为什么要在母版页中关闭验证器?冒泡不是应该先通过GridView而不是母版页吗?如何绕过验证器或事件冒泡,以便从内容页面激发正确的事件?

您应该在母版页中为验证器添加一个验证组。验证组允许您将页面上的验证控件组织为一个集合。每个验证组都可以独立于页面上的其他验证组执行验证。

通过将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>

最新更新