如果条件X为真,我需要在Action中将复杂类型与DataAnnotations进行后期绑定。我不能在方法参数中预先绑定所有内容,因为除非X == true,否则它们中的一些将不存在因此,由于验证在复杂类型上失败,因此Model.IsValid将为false(因为它试图绑定非存在的params)。 / p>
MonoRail通过允许你在需要的时候manually bind来解决这个问题,这是我所知道的确切情况,我想知道MVC3中有类似的东西吗?
我无法重载Action因为它被一个模糊的调用爆炸,我不能发布到另一个动作,因为表单是所有动态内容,所以我看到唯一的选择是滚动我自己的验证/绑定机制拉出数据注释验证.... boooo :(
答案 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();
}