我有一个UserFormModel,它包含一个UserModel,它具有一组具有[Required]属性集的属性。我已经读过,开箱即用的MVC 3将默认验证模型中的模型。但是,当我在视图中提交一个空表单时,传回一个包含空UserModel的UserFormModel,ModelState.IsValid始终为true。
我已经尝试将UserModel发送回我的控制器并验证确定。它似乎就在我使用复杂模型时它没有验证。
我还尝试使用UserFormModel中User属性的[Required]属性(我认为默认行为不需要它),但仍然没有进行验证。
对此问题的任何想法都将不胜感激。
public class UserFormModel
{
public UserModel User;
public IEnumerable<SelectListItem> Roles { get; set; }
}
public class UserModel : ModelBase
{
[Required]
public string UserName { get; set; }
public string Title { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
}
[HttpPost]
public ActionResult Create(UserFormModel userFormModel)
{
if (ModelState.IsValid)
{
// Do Something
}
}
答案 0 :(得分:3)
您应该使用属性而非字段。所以而不是:
public UserModel User;
你应该:
public UserModel User { get; set; }
原因是默认模型绑定器仅适用于属性。
答案 1 :(得分:0)
我认为验证只会在模型中深入一个模型属性。例如,如果您有以下型号
public class Product
{
public int ProductId { get; set; }
[Required]
public int ProductName { get; set; }
[Required]
public decimal Price { get; set; }
}
public class ProductViewModel
{
[Required]
public Product Product { get; set; }
}
对视图模型中的产品对象的验证将起作用,针对产品类的验证不会有一个警告。如果Product类是实体框架代码优先方法中使用的POCO类,则验证将对数据库起作用。根据我的经验,对视图模型的验证只会起作用。