Проверка текучести не работает в Bootstrap 4 Modal - PullRequest
0 голосов
/ 23 октября 2019

Я использовал проверку аннотации данных на моих страницах Razor, которая работала нормально. Для более сложной проверки я использую Fluent Validation, которая отлично работает для всех, кроме случаев, когда она находится в модальном режиме.

    public class MyModel
{

    [RegularExpression(@"^Test|Prod", ErrorMessage = "Please Choose A Type")]
    public string Type { get; set; }

    }

public class MyValidator : MyValidator<MyModel>
{
    public MyValidator()
    {
        RuleFor(x => x.Username)
            .Empty()
            .When(support => x.Found == false)
            .WithMessage("Not Found");
        RuleFor(x => x.IsComplete)
            .Must(x => x.Equals(true))
            .WithMessage("Please confirm");
    }
}

Ниже приведен пример модального кода - я упростил его, так что извините за любые ошибки. Код в основном тексте хорошо проверяется, но ничего, что я положил в модал с Fluent Validation, не работает - он просто передается без проверок. У меня есть несколько модалов, делающих одно и то же. Проверка аннотации данных работает нормально.

<div id="" class="modal" tabindex="-1" role="dialog">    
    <div class="modal-dialog-700" role="document">
        <div class="modal-content modal-size">
            <div class="modal-header">
                <h6 class="modal-title">Test</h6>
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            </div>
        <div class="modal-body">
            <div class="container">
                <div class="row justify-content-md-center">
                    <form asp-page-handler="update" method="post">
                        <div class="form-group">
                            <label asp-for="MyModel.Username" class="control-label">Test Code</label>
                            <textarea asp-for="MyModel.Username" class="form-control" rows="2"></textarea>
                            <span asp-validation-for="MyModel.Username" class="text-danger"></span>
                        </div>

                        <div class="form-group">
                            <button class="btn">
                                <span class="text">Update</span>
                            </button>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>


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

Я также пробовал:

        RuleFor(support => support.Found.ToString())
            .Matches(@"^True$")

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

FluentValidation - это инфраструктура на стороне сервера, которая не предоставляет никакой проверки на стороне клиента напрямую. На клиенте поддерживаются следующие валидаторы:

NotNull/NotEmpty
Matches (regex)
InclusiveBetween (range)
CreditCard
Email
EqualTo (cross-property equality comparison)
MaxLength
MinLength
Length

Если вы хотите использовать правила валидации на стороне клиента, вы можете попробовать FormHelper. Помощник по формам преобразует проверки на стороне сервера в сторону клиента.

Пакет Nuget: https://www.nuget.org/packages/FormHelper

GitHub: https://github.com/sinanbozkus/formhelper

0 голосов
/ 24 октября 2019

Настоящая причина в том, что FluentValidation не не поддерживает все правила для проверки на стороне клиента.

Цитируется из Документы FluentValidation :

Обратите внимание, что не все правила, определенные в FluentValidation, будут работать с клиентом ASP.NET проверка стороны . Например, любые правила, определенные с использованием условия (с Когда / Unless), пользовательских валидаторов или обращений к Must, не будут выполняться на стороне клиента. Также не будет никаких правил в RuleSet (хотя это можно изменить - см. Ниже раздел «Набор правил для сообщений на стороне клиента»). На клиенте поддерживаются следующие валидаторы:

NotNull/NotEmpty
Matches (regex)
InclusiveBetween (range)
CreditCard
Email
EqualTo (cross-property equality comparison)
MaxLength
MinLength
Length

Так что это поведение по своему замыслу.

...