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