1

我有一个 UserFormModel ,其中包含一个 UserModel ,它具有一组带有 [Required] 属性集的属性。我已经读过 MVC 3 开箱即用将默认验证模型中的模型。但是,当我在视图中提交一个空表单时,返回一个包含空 UserModel 的 UserFormModel,ModelState.IsValid 始终为真。

我尝试只将 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
    }
}
4

2 回答 2

3

您应该使用属性而不是字段。所以而不是:

public UserModel User;

你应该有:

public UserModel User { get; set; }

原因是默认模型绑定器仅适用于属性。

于 2012-02-10T07:00:32.617 回答
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 类,则验证将对数据库起作用。根据我的经验,针对视图模型的验证只会起作用。

于 2012-02-10T20:08:38.897 回答