Estoy tratando de encontrar una manera de hacer que un objetivo de asp:RegularExpressionValidor sea un control específico cuando está dentro de un asp:DataList

El asp:DataList está en el siguiente código:

<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>

El npo:UserInput contiene el siguiente código:

<%@ 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]lass\s[0-9]{1,2}:\s{1}[^\n]*(?:\r?\n[Cc]lass\s[0-9]{1,2}:\s{1}[^\n]*)*$"
            ControlToValidate="txtUserInput"></asp:RegularExpressionValidator>    
    ...

Mi problema es que RegularExpressionValidor valida el control txtUserInput pero si mi dataList llama, digamos, 3 veces este código, el validador se aplicará en las 3 txtUserInput ocurrencias. Quiero que se aplique solo al primero

Gracias de antemano por sus consejos.

1
BYU 28 ago. 2020 a las 15:33

1 respuesta

La mejor respuesta

Si, esto se puede hacer. Primero agregue una propiedad al código UserInput.ascx detrás. En este caso Validate

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

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

Luego vincule la nueva variable a la propiedad Visible de RegularExpressionValidator

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

Luego, para habilitar el primer elemento en DataList, configure la nueva propiedad Visible en el aspx que contiene el UserControl.

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

VB : utilizando 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
1
VDWWD 1 sep. 2020 a las 11:16