我想使用ActionFilter以不同的格式(JavaScript / XML / JSON / HTML)返回控制器的Model(数据)。这是我到目前为止的地方:
ActionFilter:
public class ResultFormatAttribute : ActionFilterAttribute, IResultFilter
{
void IResultFilter.OnResultExecuting(ResultExecutingContext context)
{
var viewResult = context.Result as ViewResult;
if (viewResult == null) return;
context.Result = new JsonResult { Data = viewResult.ViewData.Model };
}
}
它的实施:
[ResultFormat]
public ActionResult Entries(String format)
{
var dc = new Models.WeblogDataContext();
var entries = dc.WeblogEntries.Select(e => e);
return View(entries);
}
调用OnResultExecuting
方法,但我没有将Model(数据)返回并格式化为JSON对象。我的控制器只是呈现视图。
更新:我遵循Darin Dimitrov对this question的回答的建议。
答案 0 :(得分:12)
这就是我想要的:
public class ResultFormatAttribute : ActionFilterAttribute, IActionFilter
{
void IActionFilter.OnActionExecuted(ActionExecutedContext context)
{
context.Result = new JsonResult
{
Data = ((ViewResult)context.Result).ViewData.Model
};
}
}
答案 1 :(得分:1)
您是否尝试使用OnActionExecuted
方法而不是OnResultExecuting
来实施过滤器代码?有可能在触发后者时,更改结果为时已晚(语义为“好的,我们手头有结果,这个钩子在此处执行此结果之前就已经开火”),但是我现在没有时间去检查MVC来源以确定。
答案 2 :(得分:-1)
你试过了吗?
return Json(entries);
在控制器操作上返回类型为JsonResult?