API控制器中的MVC4模型验证服务器端

时间:2013-09-03 09:23:00

标签: jquery asp.net-mvc asp.net-mvc-3 validation asp.net-mvc-4

我有一个管理员视图,部分视图是一些用于注册新用户的文本框。我正在使用RegisterModel类作为我的视图模型的一部分,以便我获得所有客户端验证,但我使用jquery停止表单提交,使用jquery确认验证客户端,然后将模型发送到API控制器AJAX。

这是我的RegisterModel的精简版。

[Required(ErrorMessage = "User Name Required")]
public string UserName { get; set; }
[Required(ErrorMessage = "Email Required")]
[RegularExpression("REGEX", ErrorMessage = "Invalid Email")]
public string Email { get; set; }
[Required(ErrorMessage = "Password Required")]
public string Password { get; set; }
[Compare("Password", ErrorMessage = "Passwords do not match")]
public string ConfirmPassword { get; set; }

这是我的API控制器中Register方法的开始:

[HttpPost]
public void Register (RegisterModel newUser)
{
   // Validate User

}

如何利用我的所有数据注释并在API控制器中验证我的模型?像newUser.Validate();

之类的东西

2 个答案:

答案 0 :(得分:4)

您可以使用

if (ModelState.IsValid) {

在验证模型的操作中。

即;

[HttpPost]
public void Register (RegisterModel newUser)
{
     if (ModelState.IsValid) {
     //process form data

      }

}

答案 1 :(得分:4)

好的,所以如果你想验证服务器端,你必须这样做:

[HttpPost]
public void Register (RegisterModel newUser)
{
   if (ModelState.IsValid)
   {
      // Model valid, can save
      /* Save and redirect */
   }
   else
   {
      // Model not valid returned by ASP.Net and Entity Framework
      return View(newUser); // return view including current model with errors
   }

}

注意:

当您致电ModelState.IsValid时,会强制验证您的模型。验证模型意味着ASP.Net将验证您的.Net数据注释,实体框架将验证您的实体框架数据注释,实体框架将验证您的自定义业务逻辑。

ModelState.IsValid是您可以信任的属性,用于在保存之前验证您的数据,它将处理未在客户端进行的所有验证(因为不支持或禁用JavaScript)。