Установите свойство text для CustomValidator в ASP.NET (веб-формы) - PullRequest
0 голосов
/ 09 сентября 2010

На моей странице .aspx есть ValidationSummary, куда я помещаю сообщения об ошибках, возвращаемые моим бизнес-уровнем.

Сообщения об ошибках появляются в сводке, хорошо, но не "*", который обычно появляется рядом с полем = (

В приведенном ниже коде есть следующий код:

CustomValidator cv = new CustomValidator();
cv.ControlToValidate = field.ID;
cv.ErrorMessage = "Error Message";
cv.Text = "*";
cv.IsValid = false;
Page.Validators.Add(cv);

По сути, я хочу добавить "*" рядом с каждым неправильным полем, но без создания CustomValidators для каждого ... это возможно?

1 Ответ

1 голос
/ 09 сентября 2010

Свойство 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-го уровня.

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