Свойство ErrorMessage
будет отображаться в ValidationSummary
, а свойство Text
будет отображаться там, где Validator
. Чтобы удовлетворить ваши требования, вам нужно поставить CustomValidators
рядом с теми элементами управления, которые вы хотите проверить.
Поскольку все валидаторы генерируются в коде позади, вам нужно добавить эти валидаторы в правильную позицию, используя Page.Controls.AddAt(int indexer, Control child)
, потому что CustomValidator
также является элементом управления.
Когда вы добавляете валидатор рядом с текстовым полем, вы можете получить точный индекс с помощью следующего кода.
<form id="form1" runat="server">
<asp:TextBox ID="tb" runat="server"></asp:TextBox>
<asp:Button runat="server" Text="just a post back" />
</form>
protected void Page_Load(object sender, EventArgs e)
{
CustomValidator v = new CustomValidator();
v.ErrorMessage = "error!";
v.Text = "****";
v.ControlToValidate = "tb";
int index = form1.Controls.IndexOf(tb);
form1.Controls.AddAt(index + 1, v);
}
ПРИМЕЧАНИЕ: если вы поместите текстовое поле в PlaceHolder или некоторые контейнеры, вы не сможете получить его с помощью form1.Controls
, поскольку Container.Controls
возвращает только дочерние элементы управления 1-го уровня.