我有一个 ActionFilter ,它覆盖了 OnActionExecuted 方法。在 POST 操作中,filterContext.Controller.ViewData.Model 始终为 null。我确实发现下面的文章似乎在说它不应该为 null,但这一定是 MVC 的早期版本。这就是MVC3。我应该得到什么?
ActionFilter 内的模型可用性 https://stackoverflow.com/questions/2444956/model-availability-inside-actionfilter
UPDATE:
我已经找到了最初问题的答案。我有一个自定义 ActionResult,它使用自定义日期格式化程序输出 JSON。问题是模型没有在控制器中设置。
在我的自定义 ActionResult 中,ExecuteResult 方法传递了 ControllerContext,如果我可以在那里设置模型,那就太好了:
context.Controller.ViewData.Model = _data;
但这已经太晚了,ActionFilter 中的结果仍然为 null。这似乎意味着我需要在控制器中手动设置模型:
ControllerContext.Controller.ViewData.Model = model;
Or
View(model);
这意味着我需要记住每次使用此自定义 ActionResult 时都执行此操作。有更优雅的方式吗?
另一个更新:
我找到了一种方法来做到这一点,但它并不像我希望的那么优雅。
在我在控制器中发送的自定义 ActionResult 的构造函数中,这样至少它将始终保持一致:
public JsonNetResult(object data, Controller controller) {
SerializerSettings = new JsonSerializerSettings();
_data = data;
controller.ControllerContext.Controller.ViewData.Model = _data;
}