我试图从局部视图中调用控制器动作(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
页面上,那么渲染也很好。
答案 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; }