#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
пользовательского элемента управления, затем в вашем шаблоне ввода окружите средство проверки regularexpressionIf
условием, которое проверяет, является ли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