MVC 5返回指定名称View时页面内容被包裹在pre标签内故障求解
问题根因
你遇到的页面被<pre>标签包裹的核心原因是浏览器将返回的HTML内容识别为纯文本,自动用<pre>标签包裹渲染,页面本身的HTML结构没有问题,问题出在响应头或者请求处理逻辑上。
解决方案
- 先修正JS语法错误:你的提交逻辑里
$("#SelectedFacility)缺少闭合引号,修改为:
该语法错误可能导致表单提交时触发框架的异常处理逻辑,篡改响应头格式。$("#SelectedFacility").val(e.detail.data["client-id"]); - 检查响应Content-Type:打开浏览器开发者工具的「网络」面板,查看
SelectFacility请求的响应头,确认Content-Type字段值是否为text/html。如果显示为text/plain,排查以下位置:- 全局Action过滤器是否存在针对Post请求自动修改Content-Type的逻辑
- 控制器代码中是否有手动修改
Response.ContentType的操作 - 第三方组件(比如你用到的Mvc.Grid)是否存在篡改响应头的bug
- 修正Action返回逻辑:Post请求不要直接调用另一个Action返回View,遵守PRG(Post-Redirect-Get)模式,改为重定向到
FacilitiesAction,避免Post请求上下文的异常残留:[HttpPost] public ActionResult SelectFacility(int selectedFacility) { // 获取facilityName逻辑保持不变 return RedirectToAction("Facilities", new { selectedFacility = selectedFacility, selectedFacilityName = facilityName }); } - 排除布局页影响:临时将视图的Layout设为null,测试返回内容是否正常,排查布局页中是否存在错误的输出逻辑将HTML转义为字符串。
- 检查全局JS逻辑:是否存在拦截所有表单提交、改为Ajax异步提交的逻辑,如果有,确认返回的HTML是否被当成纯文本插入到了页面中,而非替换整个文档内容。
内容的提问来源于stack exchange,提问作者largy
相关产品推荐
相关产品推荐

