Нацелить конкретный элемент управления в ASP:DataList

#c# #asp.net #.net

#c# #asp.net #.net

Вопрос:

Я пытаюсь найти способ сделать asp:RegularExpressionValidor целевым конкретный элемент управления, когда он находится внутри asp:DataList

asp:DataList находится в следующем коде:

 <asp:DataList ID="dlUserInputs" runat="server" DataKeyField="tagname" ItemStyle-CssClass="paddingBottom20" CssClass="layout">
    <ItemTemplate>
        <npo:UserInput ID="ctrlUserInput" runat="server" /> // user control 
    </ItemTemplate>
</asp:DataList>
  

npo:UserInput содержит следующий код:

 <%@ Control Language="VB" AutoEventWireup="false" CodeFile="UserInput.ascx.vb" Inherits="web_controls_publication_UserInput" %>

    ...
            <asp:Label ID="lblUserInput" runat="server" Visible="false" />
            <asp:TextBox ID="txtUserInput" runat="server" Visible="false" TextMode="MultiLine" Rows="10" Width="100%"/>
            <asp:RegularExpressionValidator ID="RegularExpressionValidator" runat="server"
             ErrorMessage="<%$ Resources:PageText, LETTER_GOODSANDSERVICESXML_WRONGFORMAT %>" ValidationExpression="^[Cc]lasss[0-9]{1,2}:s{1}[^n]*(?:r?n[Cc]lasss[0-9]{1,2}:s{1}[^n]*)*$"
            ControlToValidate="txtUserInput"></asp:RegularExpressionValidator>    
    ...
  

Моя проблема в том, что RegularExpressionValidor проверяет элемент управления txtUserInput , но если мой dataList вызывает, скажем, 3 раза этот код, средство проверки будет применяться к 3 txtUserInput случаям. Я хочу, чтобы он применялся только к первому

Заранее благодарю вас за ваши советы

Комментарии:

1. Вам нужно будет написать пользовательский валидатор — возможно, вы сможете использовать regularexpressionvalidator

2. Это единственное решение? я имею в виду, что нет ничего другого, кроме выполнения функции проверки на стороне сервера?

3. Вы можете создать свойство с именем Index , а затем привязать ItemIndex в вашем ItemTemplate к свойству index вашего UserInput пользовательского элемента управления, затем в вашем шаблоне ввода окружите средство проверки regularexpression If условием, которое проверяет, является ли Index == 0

4. @BYU не уверен, что вы имеете в виду — пользовательский валидатор также может выполнять проверку на стороне клиента.

Ответ №1:

Да, это можно сделать. Сначала добавьте свойство в UserInput.ascx код позади. В этом случае Validate

 public partial class UserInput : System.Web.UI.UserControl
{
    public bool Validate { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {    
    }
}
  

Затем привяжите новую переменную к Visible свойству RegularExpressionValidator

 <asp:RegularExpressionValidator ID="RegularExpressionValidator" Visible='<%# Validate %>'
  

Затем, чтобы включить первый элемент в DataList , установите новое Visible свойство в aspx, содержащем UserControl.

 <asp:DataList ID="dlUserInputs" runat="server">
    <ItemTemplate>
        <npo:UserInput ID="ctrlUserInput" Validate='<%# Container.ItemIndex == 0 %>' />
    </ItemTemplate>
</asp:DataList>
  

VB — использование https://codeconverter.icsharpcode.net /

 Public Partial Class UserInput
    Inherits Web.UI.UserControl

    Public Property Validate As Boolean

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    End Sub
End Class