【问题标题】:Button in GridView, OnCommand, Event Bubbling, Master PageGridView、OnCommand、事件冒泡、母版页中的按钮
【发布时间】:2015-10-30 04:48:32
【问题描述】:

先决条件,我对事件冒泡还很陌生。

我有一个带有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。

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

【问题讨论】:

    标签: asp.net gridview event-handling master-pages


    【解决方案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>
    

    【讨论】:

    • @misosouper 很高兴为您提供帮助。
    猜你喜欢
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2011-08-06
    • 2011-10-20
    • 2011-08-23
    相关资源
    最近更新 更多