我是 ASP.NET MVC 的新手。我正在尝试验证一些用户输入。我的 View 背后的模型如下所示:
public class ViewModel
{
[Required]
public int? Minimum { get; set; }
[Required]
public int? Maximum { get; set; }
}
我的 View (.cshtml 文件)看起来像这样
@model Website.Models.ViewModel
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
...
<div class="row">
<div class="col-sm-6"><input class="form-control input-sm" id="Minimum" name="Minimum" type="text" /></div>
<div class="col-sm-6"><input class="form-control input-sm" id="Maximum" name="Maximum" type="text" /></div>
</div>
...
<br />
<button type="submit" class="btn btn-primary">Save</button>
}
我的 Controller ,看起来像这样:
public class MyController
{
public ActionResult Edit(int? id)
{
var model = new ViewModel();
return View(model);
}
[HttpPost]
public ActionResult Edit(ViewModel model)
{
if (ModelState.IsValid) {
var result = await model.SaveAsync();
return RedirectToAction("Edit", new { id = result.DemandId, u = "true" });
}
return View(model);
}
}
我的代码正在验证是否提供了该字段。但是,我需要添加一些业务规则。例如,我需要确保最大值大于最小值。如果不是,那么我需要给用户一个错误。我打算有更复杂的验证场景。
我的问题是,我应该如何处理 ASP.NET MVC 中的这些高级验证场景?
最佳答案
如果您要进行大量验证,我建议您深入研究 Fluent Validation图书馆。
安装后,您需要在 Application_Start
事件期间配置 FluentValidationModelValidatorProvider
(位于 FluentValidation.Mvc
命名空间中)你的 MVC 应用程序。
这使得 Fluent Validation 能够连接到 ModelState
并触发 ModelState.IsValid
等
protected void Application_Start() {
/* Your other initializing code */
FluentValidationModelValidatorProvider.Configure();
}
然后创建你的验证器
public class ViewModelValidator : AbstractValidator<ViewModel> {
public ViewModelValidator() {
RuleFor(x => x.Minimum).NotNull();
RuleFor(x => x.Maximum).NotNull.GreaterThan(x => x.Minimum)
}
}
并将它连接到您的 ViewModel。
[Validator(typeof(ViewModelValidator))]
public class ViewModel
{
[Required]
public int? Minimum { get; set; }
[Required]
public int? Maximum { get; set; }
}
这是一个list of all inbuilt validation并且它也很容易创建自定义的数据库驱动验证。
关于c# - ASP.NET MVC - 验证表单输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28630692/