Visual Studio下aspx .NET项目仅首次postback有效需重载问题
ASPX 站点本地开发PostBack仅触发一次问题解决方案
根因定位
该问题是Visual Studio 2019 16.4.x版本的已知兼容性bug,仅在打开基于.NET Framework 4.0的旧Website项目(非Web Application项目)、使用Classic管道模式的IIS Express运行时出现:首次请求生成的页面视图状态(ViewState)校验值与本地临时编译文件绑定,二次提交时IIS Express会意外标记对应编译文件过期,导致PostBack请求的视图状态校验不通过,后端事件不会被触发。重载项目时会清空当前编译缓存,因此可以再成功触发一次PostBack。
分步解决方法
1. 清空临时编译缓存
- 退出所有正在运行的IIS Express进程(右下角系统托盘右键IIS Express图标选择退出)
- 删除本地ASP.NET临时编译目录下的所有文件,路径为:
C:\Users\[你的系统用户名]\AppData\Local\Temp\Temporary ASP.NET Files
2. 调整VS Web项目配置
打开VS菜单栏「工具>选项>项目和解决方案>Web项目」,修改以下配置:
- 勾选调试启动前删除所有临时ASP.NET文件
- 64位系统勾选对网站和项目使用64位版本的IIS Express
3. 修改项目Web.config适配本地开发
检查站点根目录下的Web.config文件,调整以下节点配置:
<!-- compilation节点去掉optimizeCompilations属性,debug设为true --> <compilation debug="true" targetFramework="4.0"> <!-- pages节点临时关闭ViewState MAC校验,生产环境改回即可 --> <pages enableViewStateMac="false">
4. 调整开发服务器参数
在项目的Web服务器配置中做两处修改:
- 勾选Always Start when Debugging,避免VS复用已经出现缓存异常的IIS Express进程
- 可临时将Managed Pipeline Mode改为Integrated模式验证,如果PostBack恢复正常,说明Classic模式下的ISAPI处理程序映射存在版本冲突,可手动在IIS Express的applicationhost.config中校正.aspx路径的运行时指向
长效解决方案
旧Website项目模式在高版本VS中的兼容性问题较多,建议将项目迁移为Web Application项目,迁移后可彻底避免这类偶发的PostBack丢失、编译缓存冲突问题。
内容的提问来源于stack exchange,提问作者Joseph Turner
相关产品推荐
相关产品推荐

