Asp.net mvc 我应该在域模型中也使用数据注释吗?ASP.NETMVC
我是ASP.NETMVC的新手,有些事情让我感到困惑。 我正在创建一个登录/注册web应用程序,当我来确认密码时,我有点困惑。我当然不想在我的数据库中确认密码列。因此,我使用ViewModel。我在ViewModel中使用数据注释进行验证。因此,不需要在我的域模型中编写任何验证代码 但当实体框架从我的域模型对象创建一个表时,它将从哪里获得信息,例如用户名应该包含多少个字符?如果我在域模型中使用数据注释,我会编写MaxLength之类的东西Asp.net mvc 我应该在域模型中也使用数据注释吗?ASP.NETMVC,asp.net-mvc,model,entity,viewmodel,Asp.net Mvc,Model,Entity,Viewmodel,我是ASP.NETMVC的新手,有些事情让我感到困惑。 我正在创建一个登录/注册web应用程序,当我来确认密码时,我有点困惑。我当然不想在我的数据库中确认密码列。因此,我使用ViewModel。我在ViewModel中使用数据注释进行验证。因此,不需要在我的域模型中编写任何验证代码 但当实体框架从我的域模型对象创建一个表时,它将从哪里获得信息,例如用户名应该包含多少个字符?如果我在域模型中使用数据注释,我会编写MaxLength之类的东西 我也应该验证域模型中的数据吗?您可以在视图模型上使用数据
我也应该验证域模型中的数据吗?您可以在视图模型上使用数据注释并在视图中包含jQuery验证脚本来进行客户端验证 因此,在视图模型中,您可以如下设置最小密码长度限制:
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表示是否可以将来自请求的传入值正确绑定到模型,以及在模型绑定过程中是否违反了任何明确指定的验证规则。---
是-您还需要验证数据模型。我的数据库表如何获得有关数据对象必须具有哪些限制的信息?例如,如果我没有在我的域模型中键入上面所要求的用户名,我的数据库如何理解我的表中的用户名字段不能为空?@bazera字符串是引用类型,因此已经是“可空”的。只有值类型(如int)可以为null,否则它们不能为null。您可以通过执行public int将其他类型设置为可为null?MyInt等…因此在将用户名保存到数据库之前,必须检查控制器中的用户名是否为null。如果您在viewmodel中的用户名上设置了[Required],ModelState.IsValid将检查服务器端传递的用户名是否为null。在保存用户之前,您也可以自己再次检查。@bazera Identity 2已经为您完成了:var result=wait userManager.CreateAsync(user,model.Password);如果您的用户没有用户名,则会在“结果”中显示错误。您可以检查(result.successed){continue}或者{throw error}