我的问题是
当我从我的Create Controller传递UserCreateViewModel时,这意味着我的验证(ModelState.IsValid)将仅起作用 在UserCreateViewModel上,如果在其上定义了注释。但是我无法在每个ViewModel上定义DataAnnotation,因为这将是很多工作。 相反,我想把它放在用户域模型上。那么如何修复Create方法来修复我的Annotation工作和mapper,而无需向控制器添加更多代码。
//我的控制器创建方法
[HttpPost]
public ActionResult Create(UserCreateViewModel user)
{
if (ModelState.IsValid)
{
var createUser = new User();
Mapper.Map(user, createUser);
_repository.Add(createUser);
return RedirectToAction("Details", new { id = createUser.UserId });
}
return View("Edit", user);
}
// UserCreateViewModel - >创建特定视图模型
public class UserCreateViewModel
{
public string UserName { get; set; }
public string Password { get; set; }
}
//用户 - >域对象
[MetadataType(typeof(User.UserValidation))]
public partial class User
{
private class UserValidation
{
[Required(ErrorMessage = "UserName is required.")]
[StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")]
[RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed")]
public string UserName { get; set; }
[Required(ErrorMessage = "Password is required.")]
[StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")]
public string Password { get; set; }
}
}
答案 0 :(得分:1)
验证应至少放在视图模型上,因为这是您作为用户输入接收的内容。就模型的验证而言,您也可以添加它,但只要您将视图模型传递给POST操作(这正是您应该做的),模型的验证将被忽略。当然这不是问题,因为模型可能会在其他应用程序上重用,而不使用视图模型,这样您的模型就可以保证有效。就ASP.NET MVC而言,此步骤不是必需的。