我是ASP.NET MVC的新手,有些让我困惑的事情。 我正在创建一个登录/注册web-app,当我来确认密码时,我有点困惑。我当然不希望在我的数据库中确认密码列。因此,我使用ViewModel。我在ViewModel中使用数据注释进行验证。因此,无需在我的域模型中编写任何验证代码。
但是当Entity Framework从我的Domain Model对象创建一个表时,它将从哪里获取有关用户名应该占用多少个字符的信息?如果我在我的域模型中使用数据注释,我会写MaxLength或其他东西。
我是否应该验证域模型中的数据?
答案 0 :(得分:1)
您可以在View Model上使用Data Annotations来处理客户端验证,并在View中包含jQuery验证脚本。
因此,在View Model中,您可以设置最小密码长度限制,如下所示:
using System.ComponentModel.DataAnnotations;
public class RegisterViewModel
{
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
当然,这仅适用于客户端验证,对于服务器端验证,您必须验证控制器中的数据,但我不认为您必须在域模型上使用数据注释。
因此,在您的控制器中,您可以像这样验证传递的数据
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterViewModel model)
{
//checks for data passed through, if somehow people bypasses client side validation
if (ModelState.IsValid)
{
//continue
}
//validation failed, return to view
return View(model);
}
ModelState.IsValid指示是否可以正确地将请求中的传入值绑定到模型,以及在模型绑定过程中是否破坏了任何显式指定的验证规则。 ---- what does this do : ModelState.IsValid