现象:

昨天在处理PBS系统问题的时候意外发现两个js错误(而同样的代码在同事机器上都没有问题),如下图。

图1

图2

图3

原因分析:

初步看起来是因为页面上没有id为'form1'的form和id为‘MainContent_rblIsAdProduct_0’的radiobutton,那它实际生成的id是什么呢?为了确认,我查看页面的源代码,发现生成的id如下图。

图4

masterpage中的id为'form1',生成HTML后变成了'aspnetForm'。

图5

内容页中的id为'MainContent_rblIsAdProduct_0'加了前缀'ctl00_'。

通过源代码的分析,看起来像asp.net 3.5或更早版本的行为(给服务器端控件生成唯一客户端ID),因为从asp.net 4.0版本开始已经默认不加前缀了,而我本机的.net framework就是4.0版本的,项目站点指定的也是.net framework 4.0,那为什么看起来还是asp.net 3.5的效果呢?

首先查看项目(PackageFH.Offline.Site)使用的.net framework框架版本,发现使用的是.net framework 4的版本,所以项目使用的.net framework版本没有问题,也就排除了项目使用框架版本不正常的怀疑。

联想到在同事的开发机器上浏览起来都正常,唯独在我的机器上报错,所以很有可能是某个地方的配置不对,首先我想到会不会是IISExpress的配置问题,为了快速验证,我拿同事机器上IISExpress的配置文件过来替换,再次运行错误果然不见了,所以验证了是因为IISExpress的配置导致了这个问题。

既然确定了是因为IISExpress的配置导致的,那就要确定到底是那一个点导致的,经过反复比对和验证,最后发现是由applicationhost.config中site节点下根目录('/')的配置导致的,因为我的机器根目录指向的是一个使用asp.net 3.5框架的站点,如图6,而这个站点下的web.config指定了controlRenderingCompatibilityVersion属性使用asp.net 3.5版本,如图7。

图6

图7

解决方案:

既然找到了问题的根本原因,那么解决方法就很简单了。将IISExpress下site的根目录指定为%IIS_SITES_HOME%或一个已存在的目录(如果目录中存在web.config,需要去掉controlRenderingCompatibilityVersion和clientIDMode),使用asp.net 4.0框架默认配置既可,如图8。

图8

注:site节点的根目录相当于IIS中的站点根目录,而application相当于应用程序(也可以是虚拟目录),如果站点根目录下有web.config文件,那么整个站点都会应用这个配置,所以site的根目录最好不要有web.config文件。

参考文章:

1,StackOverFlow中的解释:http://stackoverflow.com/questions/4437717/asp-net-2-5-prefixing-ctl00-and-asp-net-4-not-prefixing-ctl00

 

IISExpress配置文件的一个坑的更多相关文章

  1. IISExpress配置文件

    ASP.NET MVC IISExpress配置文件的一个坑 现象: 昨天在处理PBS系统问题的时候意外发现两个js错误(而同样的代码在同事机器上都没有问题),如下图. 图1 图2 图3 原因分析: ...

  2. CentOS 7下升级MySQL5.7.23的一个坑

    发现CentOS 7下升级MySQL5.7.23的一个坑,以前面升级到MySQL 5.7.23的一个集群为例 在我们环境下打开文件描述符个数的参数open_files_limit在MySQL 5.6. ...

  3. 用html5的视频元素所遇到的第一个坑

    html5 有一个video标签,这个是被大家所熟知的事情.按照w3c的规范,我认真的写出如下代码: <video preload="auto" controls=" ...

  4. 监控jvm的一个坑

    监控jvm的一个坑 1,遇到的问题 我按照以往文档,在catalina.sh里追加jvm的监控api,如下 紧接着我启动 tomcat. 未报任何错误. 发现 lsof –i:12000, 12000 ...

  5. JavaScript中sort方法的一个坑(leetcode 179. Largest Number)

    在做 Largest Number 这道题之前,我对 sort 方法的用法是非常自信的.我很清楚不传比较因子的排序会根据元素字典序(字符串的UNICODE码位点)来排,如果要根据大小排序,需要传入一个 ...

  6. PHP中逻辑运算符and/or与||/&&的一个坑

    我原来以为PHP中的and和&&是一样的, 只是写法上为了可读性和美观, 事实上我错了. 这里面深藏了一个坑! 看以下代码: $bA = true; $bB = false; $b1  ...

  7. 困扰多日的C#调用Haskell问题竟然是Windows的一个坑

    最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C# ...

  8. 在VS2012中GridView的一个坑

    使用GridView的时候遇到了一个坑,一个增加一个选择按钮~貌似在某些情况下会出现一个是否允许选择的属性,貌似会默认为fals,然后就返回不了指定ID!坑,巨坑!但是今天居然找不到这个属性了,难道是 ...

  9. 【转载】linux命令行计算器bc的一个“坑”

    [转载自]http://blog.chinaunix.net/uid-174325-id-3518953.html 结论:ibase,obase可以使用在不同的计算公式里,但是尽量把obase放iba ...

随机推荐

  1. 利用PinYin4j 实现List中的对象按数字,字母, 汉字排序

    要排序的对象: import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPi ...

  2. JS完成改变新闻字体大中小的显示

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  3. FileCopy

    /*[入]指的是到内存里,[出]指的是到内存外*/ import java.io.*; public class MyReadFile{ public static void main(String[ ...

  4. python 将页面保存为word

    将博客或者留言页面保存为word文档 -----------2016-5-11 14:40:04-- source:http://blog.csdn.net/how8586/article/detai ...

  5. odoo关联表查询方法

    testinfo=self.env['product.attribute.value'].search([('product_ids.product_tmpl_id','=',2047)]) for ...

  6. Spring对Hibernate事务管理

    谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的.在Hibernate中 我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据 ...

  7. Android中的启动模式(下)

    在这篇文章中,我会继续跟大家分享有关于Android中启动模式的相关知识.当然,如果对这个启动模式还不完全了解或者没有听过的话,可以先看看我之前写的有关于这个知识点的入门篇Android的启动模式(上 ...

  8. Maven——聚合与继承

    原文:http://www.cnblogs.com/xdp-gacl/p/4058008.html 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 ...

  9. OpenGL的glOrtho平行投影函数详解[转]

    glortho函数可以将当前的可视空间设置为正投影空间.基参数的意义如图,如果绘制的图空间本身就是二维的,可以使gluOrtho2D.他的使用类似于glOrtho 原型是: void glOrtho( ...

  10. EMV技术学习和研究(转)

    刚开始学习EMV&PBOC,磕磕碰碰,感谢xuture的<EMV技术学习和研究>给了很大帮助,让我少走了很多弯路,也感谢广俊.surge.艾零.小SO.Spinach.龙行天下的帮 ...