如何解决ASP.NET页面中@语法无法解析生效的问题
问题根因
@ 是 Razor 视图引擎的专属语法,属于 ASP.NET Web Pages 技术栈的标记规则。你当前IIS默认走传统ASP.NET Web Forms处理管线,只识别<%= %>格式的内嵌代码块,既没加载Razor解析组件,也没把对应后缀的文件交给Razor引擎处理,所以@DateTime.Now会直接被当普通文本输出。
解决步骤
1. 安装必要的Windows功能和运行组件
- 打开「控制面板→程序和功能→启用或关闭Windows功能」,找到「Internet Information Services→万维网服务→应用程序开发功能」,勾选以下项:
- ASP.NET 4.8(Win10默认提供的最高版本.NET Framework 4.8对应选项,不要只勾选3.5版本)
- .NET Extensibility 4.8
- ISAPI 扩展
- ISAPI 筛选器
- 安装ASP.NET Web Pages 运行时:Razor引擎不是.NET Framework默认自带的组件,需要单独安装对应版本的ASP.NET Web Pages Runtime,安装完成后IIS才会识别Razor页面的处理逻辑。
- 如果安装完成后仍不识别ASP.NET相关组件,以管理员身份打开命令提示符,执行以下命令重新注册IIS的ASP.NET运行时:
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
2. 修正站点基础配置
- 打开IIS管理器,找到你部署的站点对应的应用程序池,做以下设置:
- .NET CLR 版本选择「v4.0.30319」
- 托管管道模式选择「集成」,不要用经典模式,也不要选「无托管代码」(该选项仅用于ASP.NET Core站点)
- 注意文件后缀:带
@Razor语法的页面不能存为.html或.aspx后缀,C#语法的Razor页面必须使用.cshtml后缀,否则要么被当静态文件直接输出,要么被Web Forms解析器处理,无法识别@标记。你之前的测试代码存为.cshtml后缀才会被Razor引擎解析。
3. 最小可用web.config配置
在站点根目录下创建web.config文件,填入以下基础配置即可,不需要额外复杂设置:
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.8" /> <pages controlRenderingCompatibilityVersion="4.0" /> </system.web> <system.webServer> <defaultDocument> <files> <add value="Default.cshtml" /> </files> </defaultDocument> </system.webServer> </configuration>
验证方法
把你之前写的测试代码存为Default.cshtml放到站点根目录,重启对应IIS站点后访问站点地址,@DateTime.Now就会正常输出当前服务器时间,不会再被当纯文本显示。
补充说明:你之前用
<%= DateTime.Now %>能正常运行,是因为这个是ASP.NET Web Forms的原生内嵌输出语法,.aspx页面的解析器默认支持该写法,和Razor语法属于两套完全独立的页面解析规则。
内容的提问来源于stack exchange,提问作者Graham
相关产品推荐
相关产品推荐

