在视图中显示 Fluent 验证错误时出现问题

Problem in showing Fluent Validation Errors in View

提问人:Magasvazn 提问时间:11/11/2023 最后编辑:Magasvazn 更新时间:11/11/2023 访问量:26

问:

我想在输入框下方看到 Fluent Validation 错误(我尝试使用并提交按钮方法并且它是正确的),但我需要以另一种方式进行。我的实体代码:

public class RegisterUserDTO
    {
        public string FullName { get; set; }
        public string NationalCode { get; set; }
        public string Password { get; set; }
        public string RePassword { get; set; }
        public List<RolesInRegisterUserDTO> Roles { get; set; }
    }

    public class RolesInRegisterUserDTO
    {
        public long Id { get; set; }
    }

程序 .cs:

builder.Services.AddScoped<IValidator<RegisterUserDTO>, UserValidation>();

验证者:

public class UserValidation:AbstractValidator<RegisterUserDTO>
    {
        public UserValidation()
        {
            RuleFor(y => y.FullName)
                .NotEmpty();

            RuleFor(x => x.NationalCode)
                .NotEmpty();

            RuleFor(z => z.Password)
                .NotEmpty();
        }
    }

控制器:

        private readonly IValidator<RegisterUserDTO> _registerUserValidator;
        public UsersController(IValidator<RegisterUserDTO> registerUserValidator)
        {
            _registerUserValidator = registerUserValidator;
        }
        [Authorize(Roles = "Admin")]
        [HttpPost]
        public IActionResult Create(RegisterUserDTO User)
        {
            var Result = _registerUserValidator.Validate(User);
            if (!Result.IsValid)
            {
                Result.AddToModelState(ModelState,null);
                return View("Create",User);
            }
         
            return View();
        }

HTML格式:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@model IT_Parts.Application.Services.Users.Commands.RegisterUserDTO

<section>
    <div class="row">
        <div class="col-xxl-7 col-xl-7">
            <div class="contact__wrapper  white-bg">
                <div class="contact__form">
                        <div class="row">
                            <div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
                                <div class="contact__input-wrapper mb-25">
                                    <div class="contact__input">
                                        <input asp-for="FullName" type="text" placeholder="name" id="FullName" />
                                        <span asp-validation-for="FullName"></span>
                                        <i class="fal fa-user"></i>
                                    </div>
                                </div>
                            </div>
                            <div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
                                <div class="contact__input-wrapper mb-25">
                                    <div class="contact__input">
                                        <input asp-for="NationalCode" type="text" placeholder="national code" id="NationalCode" />
                                        <span asp-validation-for="NationalCode"></span>
                                        <i class="fal fa-envelope"></i>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
                                <div class="contact__input-wrapper mb-25">
                                    <div class="contact__input">
                                        <input asp-for="Password" type="password" placeholder="password" id="Password" />
                                        <span asp-validation-for="Password"></span>
                                        <i class="fal fa-smile"></i>
                                    </div>
                                </div>
                            </div>
                            
                            <div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
                                <div class="contact__input-wrapper mb-25">
                                    <div class="contact__input">
                                        <input asp-for="RePassword" type="password" placeholder="repassword" id="RePassword" />
                                        <span asp-validation-for="RePassword"></span>
                                        <i class="fal fa-globe"></i>
                                    </div>
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-xxl-12">
                                    <a onclick="Registeruser()" class="m-btn m-btn-4"> </a>
                            
                                </div>
                            </div>
                        </div>
                </div>
            </div>
        </div> 
    </div>
</section>

脚本:

@section Scripts
    {

    <link href="~/Sweetalert2/sweetalert2.min.css" rel="stylesheet" />
    <script src="~/Sweetalert2/sweetalert2.min.js"></script>


    <script>
        function Registeruser() {

            swal.fire({
                title: '...',
                text: "...",
                icon: 'info',
                showCancelButton: true,
                confirmButtonColor: '#3085d6',
                cancelButtonColor: '#d33',
                confirmButtonText: 'yes',
                cancelButtonText: 'no'
            }).then((result) => {
                if (result.value) {

                    var FullName = $("#FullName").val();
                    var NationalCode = $("#NationalCode").val();
                    var Password = $("#Password").val();
                    var RePassword = $("#RePassword").val();

                    var postData = {
                        'FullName': FullName,
                        'NationalCode': NationalCode,
                        'Password': Password,
                        'RePassword': RePassword,
                    };

                    $.ajax({
                        contentType: 'application/x-www-form-urlencoded',
                        dataType: 'json',
                        type: "POST",
                        url: "Create",
                        data: postData,
                        success: function (data) {
                            if (data.isSuccess == true) {
                                swal.fire(
                                    'succeed!',
                                    data.message,
                                    'success'
                                ).then(function (isConfirm) {
                                    location.reload();
                                });


                            }
                            else {

                                swal.fire(
                                    'warning!',
                                    data.message,
                                    'warning'
                                ) ;

                            }
                        },
                        error: function (request, status, error) {
                            alert(request.responseText);
                        }

                    });

                }
            })
        }
    </script>
    }

当我运行代码时,会发生这种情况:

结果

谁能帮帮我?我很困惑,因为当我通过标签和提交按钮将我的输入从视图发送到控制器时,验证错误会正确地返回回视图并显示在输入框下,但这样我不知道为什么我会看到图片中的那个。

C# HTML ASP.NET-核心-MVC FluentValidation

评论


答: 暂无答案