【问题标题】:Uniquely identify controls in nested gridview for validation唯一标识嵌套网格视图中的控件以进行验证
【发布时间】:2015-04-14 18:47:28
【问题描述】:

我有一个嵌套网格。当用户添加记录时,我想验证子网格中的下拉控件。但在嵌套网格中,控件 ID 不是唯一的。如果您有 2 个父行和每个父级下的嵌套网格,则子网格控件将具有相同的 ID。当我验证时,验证会检查所有嵌套网格,而不仅仅是我要添加到的网格。

这是标记:

 <asp:GridView ID="GroupGridView" runat="server" AutoGenerateColumns="False" 
            Caption="Group Information" CaptionAlign="Top" CssClass="grid" 
            ShowFooter="true" DataKeyNames="GroupID">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <a href="javascript:DivExpandCollapse('div<%# Eval("GroupID")%>');">
                        <img id="imgdiv<%# Eval("GroupID")%>" width="25px" border="0" src="Images/plus.png" /> </a> 
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="GroupID">
                    <ItemTemplate>
                        <asp:Label ID="uggvLblGroupID" runat="server" Text='<%# Bind("GroupID") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Group Name">
                    <ItemTemplate>
                        <asp:Label ID="uggvLblGroupName" runat="server" Text='<%# Bind("GroupName") %>'></asp:Label>
                    </ItemTemplate>    
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Action" ItemStyle-Wrap="false" ItemStyle-HorizontalAlign="Center">
                    <ItemTemplate>
                        <asp:Button ID="uggvDeleteButton" runat="server" CausesValidation="False" CommandName="Delete" 
                                        Text="Delete" CssClass="gridActionbutton"  OnClientClick="return confirm('Are you sure you want to delete this Group Information?')" >
                        </asp:Button>
                        <tr><td colspan="100%">  
                        <div id="div<%# Eval("GroupID") %>" style="display:none">
                            <asp:GridView ID="GroupMemberGridView" runat="server" AutoGenerateColumns="false" 
                                  CssClass="grid" ShowFooter="true">
                                <Columns>
                                    <asp:TemplateField HeaderText="MemberID">
                                        <ItemTemplate>
                                            <asp:Label ID="mggvLblMemberID" runat="server" Text='<%# Bind("MemberID") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Member Name" ItemStyle-Wrap="false"> 
                                        <ItemTemplate>
                                            <asp:Label ID="mggvLblMemberName" runat="server" Text='<%# Bind("MemberName") %>'></asp:Label>
                                        </ItemTemplate>               
                                        <FooterTemplate>
                                            <asp:DropDownList ID="mggvDDLMemberName" runat="server" ClientIDMode="Static" 
                                               class="chosen-single" data-placeholder="Choose member…">
                                            </asp:DropDownList>
                                            <asp:RequiredFieldValidator ID="ReqValueDDLMemberInsert" runat="server" InitialValue="0" 
                                                   ControlToValidate="mggvDDLMemberName" ValidationGroup="'<%# "InsertGroupMemberValidation_" + Eval("GroupID") %>' 
                                                    ErrorMessage="Selection required." CssClass="message-error-dropdown">
                                            </asp:RequiredFieldValidator>                                       
                                        </FooterTemplate>
                                    </asp:TemplateField>                                
                                    <asp:TemplateField HeaderText="Action" ItemStyle-Wrap="false" ItemStyle-HorizontalAlign="Center">                           
                                        <FooterTemplate>
                                            <asp:Button ID="mggvAddButton" runat="server" CommandName="Add" Text="Add Member" Width="90%"  
                                                CssClass="gridActionbutton" ValidationGroup='<%# "InsertGroupMemberValidation_" + Eval("GroupID") %>'> CausesValidation="true">
                                            </asp:Button>
                                        </FooterTemplate>
                                    </asp:TemplateField>
                                </Columns>
                            </asp:GridView>
                        </div>
                    </ItemTemplate>             
                    <FooterTemplate>
                        <asp:Button ID="uggvAddButton" runat="server" CommandName="Add" Text="Add Group" Width="90%" CausesValidation="true" 
                                        CssClass="gridActionbutton" ValidationGroup="InsertGroupNameValidation"
                        </asp:Button>
                    </FooterTemplate>
                    </asp:TemplateField>
            </Columns>
        </asp:GridView>

无论我单击哪个“添加成员”按钮,都会为所有嵌套网格触发验证,因为验证组不是唯一的。

如何唯一标识每个嵌套网格的 ValidationGroup?

谢谢。

更新 ValidationGroup 标识符在将成员添加到第一个嵌套组而不是随后的嵌套网格时起作用。它似乎仍在通过所有嵌套网格,而不仅仅是您单击的“添加”按钮中的那个。

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:
    //Access Validators and Buttons
            RequiredFieldValidator RequiredFieldValidator1 = (RequiredFieldValidator)e.Row.FindControl("RequiredFieldValidator1");
            RequiredFieldValidator RequiredFieldValidator2 = (RequiredFieldValidator)e.Row.FindControl("RequiredFieldValidator2");
            RequiredFieldValidator RequiredFieldValidator3 = (RequiredFieldValidator)e.Row.FindControl("RequiredFieldValidator3");
            Button Button = (Button)e.Row.FindControl("Button1");
    
            //Assign validation group to controls.
            RequiredFieldValidator1.ValidationGroup = "Gridview1" + e.Row.RowIndex.ToString();
            RequiredFieldValidator2.ValidationGroup = "Gridview1" + e.Row.RowIndex.ToString();
            RequiredFieldValidator3.ValidationGroup = "Gridview1" + e.Row.RowIndex.ToString();
            Button.ValidationGroup = "Gridview1" + e.Row.RowIndex.ToString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 2023-03-26
      • 2022-12-06
      相关资源
      最近更新 更多