Вопрос

Проверка Asp.Net Core MVC RC-1 не отображается, когда JavaScript отключен

Автор вопроса: DeckardОтветов: 2

У меня есть форма, которая должна работать даже при отключенном JavaScript, и мне нужно проверить эту форму, у меня есть помощник по тегу для нее, например:

<span asp-validation-for="ContactName" class="text-danger" />

И в моем контроллере:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(ContactViewModel contact)
    {
        if (!ModelState.IsValid)
        {
            return View(contact);
        }
         // do something
     }

Вот моя модель просмотра:

public class ContactViewModel
{
    public int ContactId { get; set; }
    public DateTime ContactDate { get; set; }

    [Required(ErrorMessage ="پر کردن این فیلد الزامی میباشد.")]
    [MaxLength(100, ErrorMessage ="حداکثر تعداد کراکتر برای این فیلد نمیتواند بیشتر از صد باشد.")]
    public string ContactName { get; set; }

    [Required(ErrorMessage = "پر کردن این فیلد الزامی میباشد.")]
    [EmailAddress(ErrorMessage ="لطفا یک ایمیل معتبر وارد کنید.")]
    [MaxLength(100, ErrorMessage = "حداکثر تعداد کراکتر برای این فیلد نمیتواند بیشتر از صد باشد.")]

    public string ContactEmail { get; set; }

    [Required(ErrorMessage = "پر کردن این فیلد الزامی میباشد.")]
    [MaxLength(4000, ErrorMessage = "حداکثر تعداد کراکتر برای این فیلد نمیتواند بیشتر از چهار هزار باشد.")]
    public string ContactBody { get; set; }

    [Range(1000000000, double.MaxValue, ErrorMessage = "لطفا یک شماره تلفن معتبر وارد نمایید.")]
    public string ContactPhone { get; set; }
}

Когда я использую помощник тега для проверки, сообщение проверки не отображается под текстовым полем, если проверка не выполняется, но когда я использую старые помощники Html, например:

@Html.ValidationMessageFor(model => model.ContactName)

Это работает, я хотел знать, это задумано или это ошибка? Также стоит отметить, что помощник тега сводки проверки работает, если я установил его asp-validation-summary="ValidationSummary.All", но мне нужно сообщение проверки для отдельного текстового поля в форме, хотя?

  • Почему вы возвращаете представление в случае недопустимой модели и Json, когда модель действительна? Это странно ! Как вы вызываете этот метод со стороны клиента? agua from mars 26.03.2016
  • К текущей проблеме это не относится, вопрос редактировал. Deckard 27.03.2016

Ответы

Ответ 1 · рейтинг 2 · Tonto

Я понял, что

<span asp-validation-for="Model.Name" class="text-danger"/>

не будет отображаться, если вы не добавите на страницу jquery-validation js. В MVC Core вам нужно будет добавить его, вызвав

   @section Scripts {
     @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
    }

Частичное представление _validationScriptsPartial имеет эту разметку

<environment names="Development">
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>

Ответ 2 · Joe Audette

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

то есть на сервере вы проверяете, действительна ли модель, и если нет, верните пользователя обратно в то же представление

if (!ModelState.IsValid)
 {
     return View(model);
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы