ASP MVC3中的MonoRail BindObject()等效?

时间:2011-11-04 13:03:06

标签: asp.net-mvc-3 model-binding

如果条件X为真,我需要在Action中将复杂类型与DataAnnotations进行后期绑定。我不能在方法参数中预先绑定所有内容,因为除非X == true,否则它们中的一些将不存在因此,由于验证在复杂类型上失败,因此Model.IsValid将为false(因为它试图绑定非存在的params)。 / p>

MonoRail通过允许你在需要的时候manually bind来解决这个问题,这是我所知道的确切情况,我想知道MVC3中有类似的东西吗?

我无法重载Action因为它被一个模糊的调用爆炸,我不能发布到另一个动作,因为表单是所有动态内容,所以我看到唯一的选择是滚动我自己的验证/绑定机制拉出数据注释验证.... boooo :(

1 个答案:

答案 0 :(得分:1)

我认为你需要的是ControllerBase.TryUpdateModel方法(它有很多重载)。 您可以像BindObject

类似地使用它

某些型号:

public class MyModel
{
    [Required]
    public string Name { get; set; }

    public string Description { get; set; }
}

在控制器操作中:

[HttpPost]
public ActionResult UpdateModel(bool? acceptedConditions)
{
    var model = new MyModel();
    if (acceptedConditions ?? false)
    {
         if (TryUpdateModel(model))
         {
             //Do something when the model is valid
         }
         else
         {
             //Do something else when the model is invalid
         }

    }   
    return View();
}