ASP.NET MVC

现象:

昨天在处理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

 
 
分类: ASP.NET
摘要: 以前使用ASP.NET WebForm开发时,喜欢使用Repeater控件嵌套的方式开发前台页面,这样就不用JS拼接HTML或者后台拼接HTML了,写出的HTML页面美观、简捷、易于维护,由于不用JS拼接HTML,所以JS写的也很少。 最近使用ASP.NET MVC开发,前台页面的功能比较复杂...阅读全文
posted @ 2014-12-16 14:32 秋荷雨翔 阅读(905) | 评论 (4) 编辑
摘要: 模板页Layout.cshtml代码(路径"~/Views/Backstage/MachineMng/Layout.cshtml"):@{ ViewBag.Title = "货机管理";} @ViewBag.Title ...阅读全文
posted @ 2014-12-16 13:12 秋荷雨翔 阅读(52) | 评论 (0) 编辑

IISExpress配置文件的更多相关文章

  1. IISExpress配置文件的一个坑

    现象: 昨天在处理PBS系统问题的时候意外发现两个js错误(而同样的代码在同事机器上都没有问题),如下图. 图1 图2 图3 原因分析: 初步看起来是因为页面上没有id为'form1'的form和id ...

  2. IISExpress实现外部访问

    首先修改IISExpress配置文件 \IISExpress\config\applicationhost.config 在website中添加一个binding <binding protoc ...

  3. IISExpress 开放局域网访问

    1. 设置 IISExpress 配置文件 applicationhost.config VS2015 :这个配置文件 在工程目录下的 .vs/config 隐藏目录 其他版本 :在用户目录中的 II ...

  4. 【Net】CEF浏览IISExpress运行Web项目

    前言 本文介绍在Winform桌面应用中,使用IISExpress做Host主机,启动.Net平台的Web项目. 浏览Web网页使用CEF开源组件. 准备 首先创建Winform项目WinFormII ...

  5. IISExpress Log 文件路径

    问题 用VS做开发时经常用IISExpress测试web程序,那么在测试过程中生成的Log文件放在哪里了? 答案 情况1 默认情况下 applicationhost.config 文中定义了连个日志文 ...

  6. Asp.Net 配置IISExpress允许外部访问

    1.找到IISExpress的配置文件,或位于(文档/IISExpress/config)文件夹下,打开applicationhost.config,找到如下代码:<site name=&quo ...

  7. 配置IISExpress允许外部访问

    1.找到IISExpress的配置文件,位于 <文档>/IISExpress/config文件夹下,打开applicationhost.config,找到如下代码: <site na ...

  8. ASP.NET下使用xml反序列化、缓存实现个性化配置文件的实时生效

    因为一些配置属性比较多,存在多组属性,因此结合xml解析.缓存技术,实现配置文化的自动解析.存入缓存.缓存依赖实时更新配置内容. 配置文件反序列化存入缓存的核心方法: public Class.Set ...

  9. 来吧学学.Net Core之项目文件简介及配置文件与IOC的使用

    序言 在当前编程语言蓬勃发展与竞争的时期,对于我们.net从业者来说,.Net Core是风头正紧,势不可挡的.芸芸口水之中,不学习使用Core,你的圈内处境或许会渐渐的被边缘化.所以我们还是抽出一点 ...

随机推荐

  1. API访问客户端

    API访问客户端(WebApiClient适用于MVC/WebForms/WinForm) 这几天没更新主要是因为没有一款合适的后端框架来支持我们的Web API项目Demo, 所以耽误了几天, 目前 ...

  2. DDD事件总线

    DDD事件总线 基本思路: (1)       在事件总线内部维护着一个事件与事件处理程序相映射的字典. (2)       利用反射,事件总线会将实现了IEventHandler的处理程序与相应事件 ...

  3. SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件

    原文:SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件 从2005开始,就引入了"数据库邮件"功能.并且取代SQLMail.原有SQLMail ...

  4. 如何解决Ora-04031错误(转)

    诊断并解决ORA-04031 错误 当我们在共享池中试图分配大片的连续内存失败的时候,Oracle首先清除池中当前没使用的所有对象,使空闲内存块合并.如果仍然没有足够大单个的大块内存满足请求,就会产生 ...

  5. CSDN博客ByeBye

    情绪csdn定制博客博客是不够的,没有足够的光.对于我这种极简的人,不合适. 我们不打算更新的博客. 至http://blog.edagarli.com/ 版权声明:本文博主原创文章.博客,未经同意不 ...

  6. SQL Mirroring[Hot back up with Double machine]

    Background: It's fairly common for businesses to want to provide some high availability for their SQ ...

  7. 用Owin Host实现脱离IIS跑Web API单元测试

    开发笔记:用Owin Host实现脱离IIS跑Web API单元测试   今天在开发一个ASP.NET Web API项目写单元测试时,实在无法忍受之前的笨方法,决定改过自新. 之前Web API的单 ...

  8. iOS:删除小程序

    //Applet的批次从父视图中移除 NSArray *subViews = [_scrollView subviews]; if([subViews count] != 0) { [subViews ...

  9. java线程API学习 线程池ThreadPoolExecutor(转)

    线程池ThreadPoolExecutor继承自ExecutorService.是jdk1.5加入的新特性,将提交执行的任务在内部线程池中的可用线程中执行. 构造函数 ThreadPoolExecut ...

  10. poj2593 Max Sequence(两个不相交字段的最大总和与)

    转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=2593">http://poj.org/prob ...