在控制器中的ActionResult上使用ActionFilter返回JsonResult

cll*_*pse 8 c# asp.net-mvc

我想使用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 };
    }
}
Run Code Online (Sandbox Code Playgroud)

它的实施:

[ResultFormat]
public ActionResult Entries(String format)
{
    var dc = new Models.WeblogDataContext();

    var entries = dc.WeblogEntries.Select(e => e);

    return View(entries);
}
Run Code Online (Sandbox Code Playgroud)

OnResultExecuting方法被调用,但我没有得到返回的Model(数据)并将其格式化为JSON对象.我的控制器只是呈现视图.


更新:我遵循达林迪米特洛夫对这个问题的回答的建议.

cll*_*pse 12

这就是我想要的:

public class ResultFormatAttribute : ActionFilterAttribute, IActionFilter
{
    void IActionFilter.OnActionExecuted(ActionExecutedContext context)
    {
        context.Result = new JsonResult
        {
            Data = ((ViewResult)context.Result).ViewData.Model
        };
    }
}
Run Code Online (Sandbox Code Playgroud)