我有这样的行动:
Update([Bind(Prefix = "CurrentModel")] dynamic edited)
但是当我使用dynamic时,ModelState.IsValid
总是返回true,所以看起来动态对象上没有验证?如果没有,我该如何解决?
答案 0 :(得分:2)
有两种情况:
您正在使用视图模型作为操作参数,在这种情况下,默认模型绑定器会自动分配属性并将可能的错误设置为模型状态:
public ActionResult Update([Bind(Prefix = "CurrentModel")] EditViewModel edited)
{
if (ModelState.IsValid)
{
}
...
}
您正在使用dynamic
或FormCollection
进行一些弱类型操作,在这种情况下,默认模型绑定器不会启动,也不执行任何验证,因为它不是能够推断出你真实的模特类型。在这种情况下,您需要手动调用TryUpdateModel
并指明您的模型类型:
public ActionResult Update(dynamic edited)
{
var model = new MyViewModel();
if (!TryUpdateModel(model, "CurrentModel"))
{
// The model was not valid
}
...
}
结论:在控制器动作中使用dynamic
作为动作参数几乎没有意义。