当从局部视图调用操作时,以纯文本形式查看渲染
View rendering as plain text when action called from partial view
我正在尝试从局部视图中调用控制器操作(Json结果):
var departmentsViewJS = {
view: "accordion",
multi: true,
cols: @Html.Action("GetDepartmentsJson")
};
动作被调用,精彩的 Json 替换了输出中的 @Html.Action
,但是整个视图(_Layout、View 和部分)以纯文本形式呈现到页面。如果我用这样的方括号替换 Action:
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
上,页面也可以正常渲染。
发生这种情况是因为当您调用 return JsonResult 操作时,它会将响应内容类型设置为 application/json。
您可以在服务器端将 GetDepartmentsJson 的 return 类型更改为字符串并将对象序列化为 json。
如果您不想更改您的控制器,那么您可以更改您的视图
@{ var prevContentType = Html.ViewContext.HttpContext.Response.ContentType; }
var departmentsViewJS = {
view: "accordion",
multi: true,
cols: @Html.Action("GetDepartmentsJson"); }
};
@{ Html.ViewContext.HttpContext.Response.ContentType = prevContentType; }
我正在尝试从局部视图中调用控制器操作(Json结果):
var departmentsViewJS = {
view: "accordion",
multi: true,
cols: @Html.Action("GetDepartmentsJson")
};
动作被调用,精彩的 Json 替换了输出中的 @Html.Action
,但是整个视图(_Layout、View 和部分)以纯文本形式呈现到页面。如果我用这样的方括号替换 Action:
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
上,页面也可以正常渲染。
发生这种情况是因为当您调用 return JsonResult 操作时,它会将响应内容类型设置为 application/json。
您可以在服务器端将 GetDepartmentsJson 的 return 类型更改为字符串并将对象序列化为 json。
如果您不想更改您的控制器,那么您可以更改您的视图
@{ var prevContentType = Html.ViewContext.HttpContext.Response.ContentType; }
var departmentsViewJS = {
view: "accordion",
multi: true,
cols: @Html.Action("GetDepartmentsJson"); }
};
@{ Html.ViewContext.HttpContext.Response.ContentType = prevContentType; }