asp.net-mvc - 从部分 View 调用操作时以纯文本形式查看渲染

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

我正在尝试从部分 View 中调用 Controller 操作 (JsonResult):

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

调用该操作,精彩的 Json 替换了输出中的 @Html.Action,但整个 View (_Layout、View 和部分)以纯文本形式呈现到页面。如果我只用括号替换操作,如下所示:

var departmentsViewJS = {
    view: "accordion",
    multi: true,
    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 上,页面也可以正常渲染。

最佳答案

发生这种情况是因为当您调用返回 JsonResult 的操作时,它将响应内容类型设置为 application/json。

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

如果您不想更改 Controller ,则可以在 View 上进行更改

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

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

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

关于asp.net-mvc - 从部分 View 调用操作时以纯文本形式查看渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27866318/

相关文章:

c# - JSON数据html参数

asp.net-mvc - 传递错误消息以进行客户端验证

java - Jackson 条件反序列化

asp.net - 无法使用 mod_mono 托管 ASP.NET MVC 4 应用程序

javascript - 重新加载部分 View 和 Ajax - ASP.NET MVC

asp.net-mvc - 我如何让 ninject 2.0 与 asp.net mvc 2 一起工作?

c# - 提交具体模型对象

javascript - 添加到 JavaScript 对象类的方法在遍历给定对象时出现

json - 找不到针对类javax.naming.ldap.LdapName $ 1的序列化程序

entity-framework - 模型 OnDelete 事件?