[bug] VS2013 Brower Link和Aspnetpager引发的问题分析

概述

在ie11上浏览页面的时候,突然发现在使用Aspnetpager的页面会有一个bug。

开发环境:win8.1+vs2013+ie11.

项目描述:这个问题出现在内容页中,应用了母版页。

解决方案

查了很多解决方案,最后将vs2013中

将该勾取消,再次浏览,你会发现就正常了,虽然该功能很强大,但是并不是什么时候都需要。希望对你有所帮助。

既然问题出了,那就得问一个为什么?

首先得知道什么是 Browser Link ?

这个 Browser Link 的功能就是通过一个脚本文件架起流程器和 Visual Studio IDE 之前的一个通信桥梁, 在启用 Browser Link 后, Visual Studio 会给网站注入一个 IHttpModule 模块对象, 然后在每个页面都会注册一段上面的脚本。

Browser Link 功能使用 SignalR 技术实现的。

说了这么多, Browser Link 功能到底是用来干什么用的?

现在 Broswer Link 功能比较简单,就是用来在 Visual Studio IDE 可以刷新浏览器中已经打开的页面, 为什么要在 Visual Studio IDE 中刷新页面?

有这么一个应用场景:假如你在开发一个页面,这个页面需要兼容 IE, GOOGLE, FIREFOX 和移动浏览器, 有可能你会同时使用这些流程器打开你的页面, 如果发现有某种问题,回到 VS IDE 进行修改, 修改完后可以在 Visual Studio IDE 点 "Refresh Linked Browsers" 来刷新所有浏览器以查看效果。

现在这个 "Browser Link " 只有这么一个刷新功能, 但是 Browser Link 功能可以编写扩展功能,可以自定义一些自己需要的功能。

Browser Link是连接VS和浏览器之间的通道。有了这个特性,web程序就能够和VS交互传递数据。这个特性在VS2013中是默认开启的。当开启了Browser Link, web程序运行的时候,就会注册一个HttpModule到asp.net的生命周期中,这个HttpModule的功能就是在每个输出的网页中,注入一段<script>脚本,这段脚本的作用就是负责VS IDE和网页间的通讯。

那么看看在启用Brower Link下会出现什么?

首先看一下Aspnetpager

BrowerLink生成的script

当开启了Browser Link, web程序运行的时候,就会注册一个HttpModule到asp.net的生命周期中,这个HttpModule的功能就是在每个输出的网页中,注入一段<script>脚本,这段脚本的作用就是负责VS IDE和网页间的通讯。

难道因为BrowerLink 影响了AspnetPager控件生命周期才造成这个bug的吗?

禁用BrowerLink后

可以正常浏览,aspnetpager控件也能正常使用。

通过对比可以发现,开启BrowerLink后,多了script和__EVENTVALIDATION的input。

__EVENTVALIDATION作用

__EVENTVALIDATION只是用来验证事件是否从合法的页面发送,只是一个数字签名,所以一般很短。

“id”属性为“__EVENTVALIDATION”的隐藏字段是ASP.NET 2.0的新增的安全措施。该功能可以阻止由潜在的恶意用户从浏览器端发送的未经授权的请求.
为了确保每个回发和回调事件来自于所期望的用户界面元素,ASP.NET运行库将在事件中添加额外的验证层。服务器端通过检验表单提交请求的内容,将其与“id”属性为“__EVENTVALIDATION”隐藏字段中的信息进行匹配。根据匹配结果来验证未在浏览器端添加额外的输入字段(有可能为用户在浏览器端恶意添加的字段),并且该值是在服务器已知的列表中选择的。ASP.NET运行库将在生成期间创建事件验证字段,而这是最不可能获取该信息的时刻。像视图状态一样,事件验证字段包含散列值以防止发生浏览器端篡改。 说明:“id”属性为“__EVENTVALIDATION”隐藏字段一般在表单的最下方,如果表单在浏览器端尚未解析完毕时,用户提交数据有可能导致验证失败。

总结

开启与关闭Brower Link差别的在前端源码中可以看到 多了一个script 块,一个hidden,猜测在__EVENTVALIDATION阻止了从浏览器端发送的未经授权的请求,而“input#ctl00$ContentPlaceHolder1$Pager_input”被认为不符合语法要求,造成该问题的。这不知道是BrowerLink的原因,还是AspnetPaer的原因,水平有限,只能分析道这里,如果你有更好的说法,麻烦分享一下。

时间: 2024-07-30 09:59:08

[bug] VS2013 Brower Link和Aspnetpager引发的问题分析的相关文章

Flash TextField selectable bug block TextEvent.Link solution

There is an old version Felx SDK bug(in my case it's Flex SDK v3.3.0.4852) that when TextField.selectable is set to false, link event on the textfield will be blocked. So if you have added html text including a link into the textfield, e.g.: var text

delete数组引发的core分析

delete [] ptr 引发了singnal 6 abort的core错误,跟踪过程发现写入ptr大量数据,引发内存越界,破坏了new数组的尾部数据保护,导致delete的时候core. 问题分析过程写了一段测试代码,发现另外一些编辑器或者说操作系统的性质,new申请的数组总是分配2的n次方的空间,比如char* ptr = new char[10]实际分配了16个字节的空间 ,char* ptr2 = new char[15]同样分配了16个空间的字节,而char* ptr3 = new

[编程开发] 由指针传參引发的一点分析

昨天有同学(初学指针)在练习单链表和二叉树的时候,程序老是崩溃,或者得不到正确结果,于是向我求助.问题就出在指针的參数传递上,没传好指针导致内存混乱,其它代码基本全对.这个错误十分可惜.故在此我想做个记录,可能显得十分基础. 假设函数的參数是普通的一级指针,那么就意味着你仅仅能使用指针.改变指针指向或者改变指向的目标变量.不能试图通过这个指针来申请内存. void getMemory(int *p) { p = (int *)malloc(sizeof(int) * 10); } void fu

[编程开发] 由指针传参引发的一点分析

昨天有同学(初学指针)在练习单链表和二叉树的时候,程序老是崩溃,或者得不到正确结果,于是向我求助.问题就出在指针的参数传递上,没传好指针导致内存混乱,其他代码基本全对.这个错误十分可惜.故在此我想做个记录,可能显得十分基础. 如果函数的参数是普通的一级指针,那么就意味着你只能使用指针.改变指针指向或者改变指向的目标变量.不能试图通过这个指针来申请内存. [cpp] view plaincopyprint? void getMemory(int *p) { p = (int *)malloc(si

VS2013安装Boost

boost的编译和使用,经过搜集资料和总结,记录成文.感谢文后所列参考资料的作者. 1 下载 地址:http://sourceforge.net/projects/boost/files/boost/1.56.0/ 可以选择 boost_1_56_0.7z 下载. 2 编译 2.1 生成boost的自用的编译工具bjam.exe 解压后,使用VS2013编译.首先打开“VS2013 开发人员命令提示”,cd 到boost解压后的根目录:E:\XXX\boost_1_56_0,执行bootstra

VS2013配置文件常见问题解决方法

1.C++ VS2013出现LINK : fatal error LNK1104: 无法打开文件“kernel32.lib,”错误,什么原因啊?原因:项目->XX(项目名称)属性->链接器->常规->附加目录库->添加“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A”:项目->XX(项目名称)属性->VC++目录->添加“C:\Program Files (x86)\Microsoft SDKs\Win

如何重现难以重现的bug

生活中有这么一种现象:如果你关注某些东西,它就会经常出现在你眼前,例如一个不出名的歌手的名字,一种动物的卡通形象,某个非常专业的术语,等等等等.这种现象也叫做“孕妇效应”.还有类似的一种效应叫做“视网膜效应”,它讲的是:你有什么东西或者特质你就特别容易在别处发现你有的这类东西和特质.干了多年测试的我就会经常发现日常使用的系统中有很多的bug,而我老婆就发现不了.今天要说的事儿是“重现难以重现的bug”,这件事儿在本周共遇见了4次:第一次是微博上有一篇<程序员,你调试过的最难的 Bug 是?>(

bug 7715339 登录失败触发 ‘row cache lock’ 等待

Bug 7715339 - Logon failures causes "row cache lock" waits - Allow disable of logon delay (文档 ID 7715339.8) 到底部 修改时间:2012-7-26类型:PATCH 为此文档评级 通过电子邮件发送此文档的链接 在新窗口中打开文档 可打印页 Bug 7715339  Logon failures causes "row cache lock" waits - All

Bug 9935857 - LOB indexes are missing from DBA_OBJECTS

来源于: Bug 9935857 - LOB indexes are missing from DBA_OBJECTS (文档 ID 9935857.8) 这个问题在使用ogg完成oracle database 10gR2 (Linux下) 向oracle database 11.2.0.4(AIX下)的 升级and 迁移 时遇到过, 当时为了核查老db和新db的object数量,就去查询的dba_objects,结果发现对不上.后来进一步检查,就找到了这个mos文章. 如下全文转载该文章: B