Свободная проверка на странице Razor - PullRequest
0 голосов
/ 27 апреля 2020

Основываясь на этой странице Я пытаюсь создать страницу бритвы, в которой бы проводилась быстрая проверка. Казалось, проверил, но я не уверен, почему сообщение об ошибке не будет отображаться.

Вот что я сделал до сих пор:

cs html .cs:

CreateCommandValidator CreateValidator = new CreateCommandValidator();
var createCheck = CreateValidator.Validate(NewItem);
foreach (ValidationFailure fail in createCheck.Errors)
{
     ModelState.AddModelError(fail.PropertyName, fail.ErrorMessage);
}
return Page();

cs html:

<label class="col-form-label">Name</label>
<input asp-for="NewItem.Name" type="text" class="form-control mb-2"/>
<span asp-validation-for="NewItem.Name" class="text-danger"></span>

CreateCommandValidator:

RuleFor
     (Item => Item.Name)
     .NotEmpty().WithMessage("The name cannot be empty")
     .Length(1, 100);

ValidationFailure может обнаружить сообщение об ошибке, но не знает, почему оно не будет отображаться на странице. Есть идеи почему? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

ValidationFailure может обнаружить сообщение об ошибке, но не уверен, почему оно не будет отображаться на странице. Есть идеи, почему?

Это потому, что ваше ключевое имя data-valmsg-for равно NewItem.Name.

Ваш файл cs html ниже:

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

сгенерирует html в браузере, как показано ниже:

<span data-valmsg-for="NewItem.Name" class="text-danger field-validation-valid" data-valmsg-replace="true"></span>

1.В первом случае вы можете изменить имя ключа, как показано ниже:

ModelState.AddModelError("NewItem.Name", fail.ErrorMessage);

2. Второе Кстати, если вы не хотите добавлять имя ключа вручную, вы можете установить пакет FluentValidation.AspNetCore и изменить свой код, как показано ниже:

CreateCommandValidator CreateValidator = new CreateCommandValidator();
var createCheck = CreateValidator.Validate(NewItem);

//AddToModelState(ModelStateDictionary modelState, string prefix);
createCheck.AddToModelState(ModelState, "NewItem");

return Page();
0 голосов
/ 27 апреля 2020

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

Пример

Просмотр (cs html):

@{
    ViewData["Title"] = "Log in";
}
<section>
    <div class="container">

    </div>
</section>


@section Scripts {
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"
            crossorigin="anonymous"
            integrity="sha256-F6h55Qw6sweK+t7SiOJX+2bpSAa3b/fnlrVCJvmEj1A=">
    </script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js"
            crossorigin="anonymous"
            integrity="sha256-9GycpJnliUjJDVDqP0UEu/bsm9U+3dnQUH8+3W10vkY=">
    </script>
}

Общий макет (_Layout.cs html) должен иметь раздел скриптов

 <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />


 </head>
<body>
    <div class="main-container">
        @RenderBody()
    </div>



    @RenderSection("Scripts", required: false)


</body>
</html>
...