我有一个看起来像这样的动作:
[Post]
[PopulateModelFromId]
public ActionResult ChangeName( string name, MyModel model )
{
try
{
model.changeName
return JSONSuccess();
}
catch( ModelUpdateException )
{
return JSONFail();
}
}
名称和模型 id 由 ajax POST 发送,模型由自定义操作过滤器填充,该过滤器采用 id 并从数据库中检索模型。
动作过滤器如下所示:
...
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// parse the id from the request
MyModel model = getModelFromDataStoreById( id );
filterContext.ActionParameters["model"] = model;
}
...
问题是 MyModel 对象没有无参数构造函数,并且 MVC 甚至在调用 ActionFilter 之前尝试创建并绑定到 MyModel 对象,但由于无法实例化 MyModel 对象而引发异常。
我的第一个问题是我这样做是否正确,还是应该使用 HttpContext.Items 之类的东西在过滤器和操作之间传输数据?其次,有没有办法告诉 MVC 不要尝试绑定 MyModel 对象,因为它将稍后创建?