首页 文章

ASP.NET中嵌套ListView中的ValidationGroup问题

提问于
浏览
0

我的ASP.NET网页上有一个嵌套的ListView,内部ListView有一个InsertItem模板,我必须验证用户条目并提供警告(使用RequiredValidator和RegExpValidator以及AJAX Extenders来添加标注) . 不幸的是,由于每个绑定项都会复制InsertTemplate,因此ValidationGroup对于每个独立的内部ListView保持相同,并且验证需要在页面上的所有ListView中的所有字段上输入,而不仅仅是从当前的InsertItem模板 .

知道如何将ValidationProperty设置为动态值吗?

这是我的ASP.NET页面代码的一个(一个纯化和煮沸的问题):

<asp:ListView ID="lstCatQualis" runat="server" ItemPlaceholderID="listQualiCats">
    </LayoutTemplate>
    <ItemTemplate>
                </tr>
                <asp:ListView ID="listQualiItems" ItemPlaceholderID="itemPlaceHolder" runat="server" DataSource='<%# Eval("Qualis") %>' InsertItemPosition="LastItem">

                  <InsertItemTemplate>
                 <tr id="quali" runat="server">
                    <td class="first">
                    </td>
                    <td class="qualirating">
                       <asp:TextBox ID="txtQualiName" runat="server" Width="250" TabIndex='1' />
                            <asp:RequiredFieldValidator ID="rv1" runat="server" ControlToValidate="txtQualiName"
                                Display="None" ErrorMessage="Bitte geben Sie Ihre Qualifikation ein."
                                ValidationGroup="quali"></asp:RequiredFieldValidator>
                            <asp:ValidatorCalloutExtender ID="vco19" runat="server" TargetControlID="rv1">
                            </asp:ValidatorCalloutExtender>
                    </td>
                    <td class="qualirating">
                       <asp:TextBox ID="txtJahreErfahrung" runat="server" TabIndex='1' />
                            <asp:RequiredFieldValidator ID="rv2" runat="server" ControlToValidate="txtJahreErfahrung"
                                    Display="None" ErrorMessage="Bitte tragen Sie die Anzhal der Jahre ein."
                                    ValidationGroup="quali"></asp:RequiredFieldValidator>
                                    <asp:ValidatorCalloutExtender ID="vco2" runat="server" TargetControlID="rv2">
                                    </asp:ValidatorCalloutExtender>
                            <asp:RegularExpressionValidator ID="ev2" runat="server" ErrorMessage="Geben Sie bitte eine Zahl ein."
                                Display="None" ControlToValidate="txtJahreErfahrung" ValidationExpression="[1-9][0-9]{0,3}"
                                ValidationGroup="quali"></asp:RegularExpressionValidator>
                            <asp:ValidatorCalloutExtender ID="vcoe2" runat="server" Enabled="True" TargetControlID="ev2">
                            </asp:ValidatorCalloutExtender>
                    </td>
                     <td class="qualilabel">
                      <asp:button ID="btnAddCatQuali" OnClick="btnAddCatQuali_Clicked" runat="server" text='Hinzufügen' TabIndex='1'  ValidationGroup="quali" />
                    </td>
                </tr>                                                          
                  </InsertItemTemplate>
                </asp:ListView>
    </ItemTemplate>
</asp:ListView>

1 回答

  • 1

    添加一个 ItemDataBound 事件处理程序并在其中,搜索每个验证程序并设置使用该项的id生成的ValidationGroup:

    protected void OnItemDataBound(object sender, ListViewItemEventArgs e) {
    
        var rv1 = e.Item.FindControl("rv1") as RequiredFieldValidator;
        if(rv1 != null)
           rv1.ValidationGroup = "quali" + rv1.ItemIndex;
    
     }
    

    使用递归函数,您可以扩展代码以查找Validator的每个子类 .

相关问题