Member 11029240 Ответов: 3

Проверка на стороне клиента MVC 4 показывает неправильное сообщение


У меня есть приложение MVC 4, использующее проверку на стороне клиента. Форма, с которой я борюсь, имеет несколько обязательных полей, но я получаю одно и то же сообщение проверки для каждого поля.

Код бритвы выглядит так:

<section class="input-label-group">
    @Html.Html5TextBoxFor(m => m.Email, InputTypes.InputType.Email, htmlAttributes: new { autofocus = "autofocus", autocomplete = "off"})
    @Html.ValidationMessageFor(m => m.Email)
</section>
<section class="input-label-group">
    @Html.Html5TextBoxFor(m => m.FullName, InputTypes.InputType.Text, htmlAttributes: new { autocomplete = "off" })
    @Html.ValidationMessageFor(m => m.FullName)
</section>

Модель выглядит так:

[Display(Name = "Email")]
[Required(ErrorMessage = "Please enter a valid email address")]
[StringLength(128, ErrorMessage = "The email address may not exceed 128 characters")]
public string Email { get; set; }

[Display(Name = "Full Name")]
[Required(ErrorMessage = "Please enter the user's full name")]
[StringLength(255, ErrorMessage = "The user's name may not exceed 255 characters")]
public string FullName { get; set; }

Но, глядя на ответ сервера при начальной загрузке страницы (то есть до запуска любого javascript), я получаю следующее:

<section class="input-label-group">
    <input autocomplete="off" autofocus="autofocus" data-val="true" data-val-length="The email address may not exceed 128 characters" data-val-length-max="128" data-val-required="Please enter a valid email address" id="Email" name="Email" placeholder="Email" type="email" value="" />
    <span class="field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span>
</section>
<section class="input-label-group">
    <input autocomplete="off" data-val="true" data-val-length="The email address may not exceed 128 characters" data-val-length-max="128" data-val-required="Please enter a valid email address" id="FullName" name="FullName" placeholder="Full Name" type="text" value="" />
    <span class="field-validation-valid" data-valmsg-for="FullName" data-valmsg-replace="true"></span>
</section>

Обратите внимание, что атрибуты данных для второго элемента управления относятся к электронной почте, а не к полному имени. Это приводит к появлению проверочных сообщений в окончательной форме (с использованием jquery.validate.js и еще jquery.validate.unobtrusive.js) при отправке пустых полей выглядеть так:

Неверное Сообщение Проверки

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Почему?

3 Ответов

Рейтинг:
1

digitalni

Все выглядит правильно, и я не вижу причин, по которым начальная загрузка страницы будет отображаться так, как вы показали здесь.

Я почти уверен, что это какая-то ошибка/неожиданное поведение. Можете ли вы попробовать то же самое, но без апострофа в [требуется(ErrorMessage = "пожалуйста, введите полное имя пользователя")]? Кроме того, используете ли вы совместимые/uptodate версии jquery.validate.js и еще jquery.validate.unobtrusive.js-что?


Рейтинг:
1

DouglasHarris

У меня есть та же проблема, изучая MVC и играя вокруг. Было ли это когда-нибудь решено?


CHill60

Пожалуйста, не публикуйте комментарии или вопросы в качестве решений для сообщений других участников - используйте функцию "есть вопрос или комментарий?" ссылка вместо этого

Рейтинг:
0

DouglasHarris

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

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule();
            rule.ErrorMessage = "Common password error.";// //FormatErrorMessage(metadata.GetDisplayName());
            //rule.ValidationParameters.Add("errormsg", _errorMessage);
            rule.ValidationParameters.Add("badpasswords", string.Join(",", badPasswords));
            rule.ValidationType = "password";
            yield return rule;
        }

Это, а также два файла сценария валидатора должны были быть ссылками прямо рядом друг с другом в представлении.

Я надеюсь, что это кому-то поможет.