使用MVC Model Binder,如何防止绑定内部复杂对象属性?

时间:2010-12-14 18:15:26

标签: model-view-controller validation properties defaultmodelbinder

我有以下型号

public class Person
{
    public int Id {get;set;}
    [Required()]
    public string Name {get;set;}
    [Required()]
    public Address Address {get;set;}
}

public class Address
{
    public int Id {get;set;}
    [Required()]
    public string City {get;set;}
    [Required()]
    public string Street {get;set;}
}

在控制器中:

 [HttpPost]
        public ActionResult Create(Person entity)
        {
            if (ViewData.ModelState.IsValid)
            {
                ///Some code
                return this.RedirectToAction("Browse");
            }
            else
            {
                return View("Edit", ViewModel);
            }
        }

问题是绑定器尝试验证内部地址类,但我所关心的是AddressID 但ModelBinder坚持要验证城市和街道的属性。

我怎样才能简单地覆盖原始的ModelBinder,只是为了验证内部对象的ID(在我的情况下是AddressID)?

有一个简单的方法吗?

1 个答案:

答案 0 :(得分:1)

听起来你的实体和你的模型有两个不同的要求。如果是这种情况,那么它们应该是两个不同的类。为MVC写一个单独的Person和address类来绑定,并且不需要城市或街道。

另一种可能但不太优雅的解决方案是不依赖于MVC进行模型绑定。如果你只有一些可以接受的值,但如果你有很多,那么我会使用我的第一个建议。