如何解决.Net Core显示模型验证与验证过滤器
我创建了一个基本的.Net Core Mvc应用程序,我想为所有操作自动设置ModelState.IsValid,这里是验证筛选器的代码
public class ValidationFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context,ActionExecutionDelegate next)
{
if (!context.ModelState.IsValid)
{
}
await next();
}
}
这是我的操作代码
[HttpPost]
public IActionResult AddUser(LoginRequestViewModel loginRequestViewModel)
{
return View(loginRequestViewModel);
}
我应该返回什么才能在asp-validation-for中显示错误? 不使用任何JavaScript代码。
解决方法
根据代码测试,可以实现全局过滤。需要将ValidationFilter设置为startup.cs中的全局过滤器。
services.AddControllersWithViews(option=>
{
option.Filters.Add(new ValidationFilter());
});
然后,创建一个模型。
public class LoginRequestViewModel
{
[MinLength(3)]
public string username { get; set; }
public string email { get; set; }
}
在ValidationFilter中定义错误消息。
public class ValidationFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context,ActionExecutionDelegate next)
{
if (!context.ModelState.IsValid)
{
//Customize your error message
string messages = string.Join("; ",context.ModelState.Values
.SelectMany(x => x.Errors)
.Select(x => !string.IsNullOrWhiteSpace(x.ErrorMessage) ? x.ErrorMessage : x.Exception.Message.ToString()));
context.RouteData.Values.Add("mes",messages);
}
await next();
}
}
实际上,获取RouteData。
[HttpPost]
public IActionResult AddUser(LoginRequestViewModel loginRequestViewModel)
{
ViewData["error"]= RouteData.Values["mes"];
return View(loginRequestViewModel);
}
创建AddUser.cshtml并使用表格。
@model solution921.Controllers.LoginRequestViewModel
<form action="/home/AddUser" method="post">
@ViewData["error"]
<input type="text" name="username" value="" />
<span asp-validation-for="username"></span>
<input type="text" name="email" value="" />
<input type="submit" name="" value="sub" />
</form>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。