c# - ASP.NET MVC - 验证表单输入

标签 c# asp.net-mvc

我是 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/

相关文章:

c# - c#中bool的默认值

c# - 如何从 linq 查询中获取所有元素?

c# - Xamarin表单,如何将byte[]保存到SQLite数据库?

c# - 您将如何重构它以使其更好?

c# - 向用户显示成功消息

asp.net-mvc - NHibernate:我如何 XmlSerialize 一个 ISet<T>?

c# - 更新用户名时验证用户名是否存在

asp.net-mvc - 使用 WebApi 在 JqGrid 中分配 JSon 数据

asp.net - 使用门户部署 Azure Web 应用程序时的自动化单元测试

c# - 将 ASP.NET MVC 5 项目迁移到 ASP.NET 5