如何在视图中向用户显示错误而不是抛出 MVC?

How can I show errors to user on view instead of throwing in MVC?

提问人: 提问时间:9/23/2022 最后编辑:marc_s 更新时间:9/24/2022 访问量:51

问:

我创建了一个验证行为,但这不会向视图中的用户显示错误。相反,它会在 Visual Studio 中引发验证异常。如何向视图中的用户显示错误?

 public class ValidationBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
        where TRequest : IRequest<TResponse>
    {
        private readonly IEnumerable<IValidator<TRequest>> _validators;

        public ValidationBehavior(IEnumerable<IValidator<TRequest>> validators)
        {
            _validators = validators;
        }
        public Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate<TResponse> next)
        {
            var context = new ValidationContext<TRequest>(request);
            var failures = _validators
                .Select(x => x.Validate(context))
                .SelectMany(x => x.Errors)
                .Where(x=>x !=null)
                .ToList();

            if (failures.Any())
            {
                throw new ValidationException(failures);
            }
            return next();
        }
    }
 public class SaveXValidator : AbstractValidator<SaveXCommand>
    {
        public SaveXValidator()
        {
            RuleFor(x=>x.ImageUrl).NotEmpty().WithMessage("Can't be empty!");
            RuleFor(b => b.StartDate)
            .LessThan(p => p.CreatedDate).WithMessage("error example");
        }
    }
C# ASP.NET-MVC 验证

评论


答:

0赞 Berk KARASU 9/24/2022 #1

您可以使用此视图在一个位置显示所有验证

 <div asp-validation-summary="All" class="alert alert-danger" role="alert">

如果要在特定点显示每个属性的验证错误,可以使用此功能。

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