我有这样的动作:
Update([Bind(Prefix = "CurrentModel")] dynamic edited)
但是当我使用动态时,ModelState.IsValid
总是返回true,所以看起来动态对象没有验证?如果没有,我该如何解决这个问题?
我有这样的动作:
Update([Bind(Prefix = "CurrentModel")] dynamic edited)
但是当我使用动态时,ModelState.IsValid
总是返回true,所以看起来动态对象没有验证?如果没有,我该如何解决这个问题?
有两种情况:
您将视图模型用作操作参数,在这种情况下,默认模型绑定器会自动分配属性并将可能的错误设置为模型状态:
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
在控制器动作中使用作为动作参数没有什么意义。