Проблема с ValidationGroup во вложенном ListView в ASP.NET - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть вложенный ListView на моей веб-странице ASP.NET, внутренний ListView имеет шаблон InsertItem, в котором я должен проверять записи пользователя и выдавать предупреждения (используя RequiredValidator и RegExpValidator и AJAX Extenders для добавления вызовов).К сожалению, поскольку InsertTemplate реплицируется для каждого связанного элемента, ValidationGroup остается неизменным для каждого независимого внутреннего ListView, и для проверки требуется запись во всех полях всех ListViews на странице, а не только из текущего шаблона 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 голос
/ 08 сентября 2011

Добавьте обработчик событий ItemDataBound и внутри него найдите каждый валидатор и установите группу 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...