DataAnnotation не появляется сообщение об ошибке - PullRequest
0 голосов
/ 18 апреля 2011

Я использую Asp.Net 4 MVC 3.0 и Razor.Мне нужно проверить равенство двух строк.Так что я сделал это, используя атрибут для класса.Я получил код от здесь .
Вот как я использовал атрибут.

    [Match("FaxNumber", "ConfirmFaxNumber", ErrorMessage = "Fax number must match")]
    public class FaxModel
    {

        [Required, StringLength(maximumLength: 10, MinimumLength = 10),
        RegularExpression(@"^([0-9]( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4})$",
            ErrorMessage = "Enter correct fax number.")]
        [Display(Name = "Fax number")]
        public string FaxNumber { get; set; }

        [Required, StringLength(maximumLength: 10, MinimumLength = 10),
        RegularExpression(@"^([0-9]( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4})$",
            ErrorMessage = "Enter correct fax number.")]
        [Display(Name = "Confirm fax number")]
        public string ConfirmFaxNumber { get; set; }

     }

А вот реализация пользовательского интерфейса двух полей.

           <div data-role="fieldcontain" class="template">
                @Html.LabelFor(expression = (m => m.FaxNumber), labelText: "Fax number:") @Html.TextBoxFor(expression: expression, htmlAttributes: new { name = "FaxNumber", value = "${FaxNumber}" })
                <blockquote>@Html.ValidationMessageFor(expression)</blockquote>
            </div>
            <div data-role="fieldcontain" class="template">
                @Html.LabelFor(expression = (m => m.ConfirmFaxNumber), labelText: "Confirm fax number:")
                @Html.TextBoxFor(expression: expression, htmlAttributes: new { name = "ConfirmFaxNumber", value = "" })
                <blockquote>@Html.ValidationMessageFor(expression)</blockquote>
            </div>

В приведенном выше фрагменте кода expression равен System.Linq.Expressions.Expression<Func<MyModels.Fax.FaxModel, object>> expression;

ТеперьПроблема в том, что даже если значения не совпадают, сообщение об ошибке не всплывает.Я не понимаю причину такого поведения.Нужна помощь.

Спасибо всем.

1 Ответ

2 голосов
/ 18 апреля 2011

Уже есть такой встроенный атрибут ([Compare]):

[Compare("ConfirmFaxNumber", ErrorMessage = "Fax number must match"]
public string FaxNumber { get; set; }

Причина, по которой эта реализация не работает, заключается в том, что это атрибут проверки уровня класса, который неНе добавьте ключ, связанный с ошибкой, поэтому ни один из помощников @Html.ValidationMessageFor не соответствует этому сообщению об ошибке.Вы, вероятно, увидите это, если будете использовать помощник @Html.ValidationSummary(false).Но еще раз атрибут Compare, вероятно, лучше подходит для того, чего вы пытаетесь достичь.

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