Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在控制器中的ActionResult上使用ActionFilter返回JsonResult_C#_Asp.net Mvc - Fatal编程技术网

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

C# 在控制器中的ActionResult上使用ActionFilter返回JsonResult,c#,asp.net-mvc,C#,Asp.net Mvc,我想使用ActionFilter以不同的格式(JavaScript/XML/JSON/HTML)返回控制器的模型(数据)。到目前为止,我的情况如下: ActionFilter: public class ResultFormatAttribute : ActionFilterAttribute, IResultFilter { void IResultFilter.OnResultExecuting(ResultExecutingContext context) {

我想使用ActionFilter以不同的格式(JavaScript/XML/JSON/HTML)返回控制器的模型(数据)。到目前为止,我的情况如下:

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 };
    }
}
以及it的实施:

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

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

    return View(entries);
}
调用了
OnResultExecuting
方法,但我没有得到返回的模型(数据)并将其格式化为JSON对象。我的控制器只是渲染视图。


更新:我正在按照达林·迪米特罗夫的建议回答。

您是否尝试过:

return Json(entries);

控制器操作的返回类型为JsonResult?

您是否尝试过在
OnActionExecuted
方法中实现过滤代码,而不是
OnResultExecuting
?有可能在触发后者时,更改结果已经太迟了(语义是,“好的,我们已经得到了结果,这个钩子在执行这个结果之前就已经触发了”),但我现在没有时间去检查MVC源代码以确定是否正确。

这就是我要寻找的:

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

IResultFilter.OnResultExecuting返回Void。Json类在该上下文中不可用。