IIS从7升级到10后ASP.NET页面form元素后出现空白行问题咨询
IIS版本差异导致form后空白的核心原因
- ASP.NET控件渲染规则变更:IIS7默认搭配的.NET Framework 2.0/3.5版本,form标签内的隐藏字段(
__VIEWSTATE、__EVENTVALIDATION等)渲染时不会额外添加换行符;IIS10默认搭配的.NET Framework 4.x默认开启XHTML严格渲染模式,隐藏字段前后会自动输出换行,部分浏览器会将这些换行解析为独立文本节点,形成可见空白。 - 响应输出处理规则差异:IIS7默认的动态内容压缩阈值较低,大多数ASP.NET响应会被压缩,过滤掉多余换行;IIS10默认动态压缩阈值更高,未触发压缩时会保留所有原始换行,放大空白问题。
- 浏览器渲染模式默认规则差异:IIS7默认不会主动指定浏览器兼容模式,大量旧站点默认运行在IE低版本兼容模式下,会忽略form尾部的空白换行;IIS10部分场景下默认会输出标准模式相关头,浏览器使用标准模式渲染时会识别出多余换行节点。
对应修复方案
通过machine.config配置修复
你可以直接修改服务器全局machine.config文件(路径为C:\Windows\Microsoft.NET\Framework[64]\v4.0.30319\Config\machine.config,根据站点运行的框架位数选择对应目录),在<system.web>节点下添加如下配置:
<pages controlRenderingCompatibilityVersion="3.5" renderAllHiddenFieldsAtTopOfForm="true" />
controlRenderingCompatibilityVersion="3.5"强制所有站点使用.NET 3.5(对应IIS7时期)的控件渲染逻辑,不会给隐藏字段添加多余换行renderAllHiddenFieldsAtTopOfForm="true"将所有form内的隐藏字段集中输出到form顶部,避免分散在form尾部产生空白
通过自定义响应头修复
你可以通过IIS管理器给站点添加自定义HTTP响应头,强制浏览器使用兼容模式渲染,忽略多余换行节点:
- 响应头名称:
X-UA-Compatible - 响应头值:
IE=EmulateIE7
该配置无需修改代码,在IIS站点功能视图的「HTTP响应头」模块添加后重启站点即可生效。
内容的提问来源于stack exchange,提问作者Super Chang
相关产品推荐
相关产品推荐

