从部分视图调用操作时,将渲染视为纯文本

时间:2015-01-09 17:51:54

标签: asp.net-mvc json asp.net-mvc-4 partial-views

我试图从局部视图中调用控制器动作(JsonResult):

var departmentsViewJS = {
    view: "accordion",
    multi: true,
    cols: @Html.Action("GetDepartmentsJson")
};

调用该操作,精彩的Json替换输出中的@Html.Action,但整个视图(_Layout,View和partial)以纯文本形式呈现给页面。如果我用这样的括号替换Action:

var departmentsViewJS = {
    view: "accordion",
    multi: true,
    cols: []
};

页面渲染完全正常(但没有那些cols)。我们是不是被允许在局部中做这样的事情,或者我搞砸了某个地方?

以下是渲染输出的示例:

var departmentsViewJS = {
    view: "accordion",
    multi: true,
    cols: [{"Id":25,"DocRoot":"Test","Name":"Test","DepartmentKeywords":null},{"Id":27,"DocRoot":"HumanResources","Name":"Human Resources","DepartmentKeywords":null}]
};

如果我将渲染的Json复制到@Html.Action页面上,那么渲染也很好。

1 个答案:

答案 0 :(得分:2)

这是因为当你调用返回JsonResult的action时,它会将响应内容类型设置为application / json。

您可以将GetDepartmentsJson的返回类型更改为字符串,并将对象序列化为服务器端的json。

如果您不想更改控制器,则可以对视图进行更改

@{ var prevContentType = Html.ViewContext.HttpContext.Response.ContentType; }

var departmentsViewJS = {
   view: "accordion",
   multi: true,
   cols: @Html.Action("GetDepartmentsJson"); }
};

@{ Html.ViewContext.HttpContext.Response.ContentType = prevContentType; }