VS2012验证控件出现WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping的问题

来源:互联网 发布:vb datagrid 列不显示 编辑:程序博客网 时间:2024/05/16 14:52
     相信很多博友都遇到过这样问题:当我们用vs创建一个空的asp.net项目时,用到验证控件时都会遇到出现异常错误,但是代码检查再三都是没有任何问题的。在做项目的时候,用户进入系统需要验证是否输入验证码,这时需要添加一个验证控件,但在运行的时候出现了如下异常错误:

                        

经过实践,以下三个方案都能解决此问题:

方案一:在程序允许的情况下,降低.Framework的版本,在Web.config中直接修改,具体方法如下:

修改前:

 <system.web>       <compilation debug="true" targetFramework="4.5" />       <httpRuntime targetFramework="4.5" />    </system.web>
      修改后:

  <system.web>        <compilation debug="true" targetFramework="4.0" />     </system.web>

方案二:在使用验证控件的当前页面后台page_load中加这样一句代码:UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;

先从字面上理解下这句代码的含义:Unobtrusive意思是不突出的,不引人注目的;谦虚的; 不唐突的;不冒昧的;那也就是讲使用验证模式设为none。微软对UnobtrusiveValidationMode的定义是:应用程序的客户端验证架构。那么我们的设置即屏蔽了微软的ValidationSettings类库,底层需要jquery的支持。

正好验证了浏览器所报的错误,这样一来虽然问题解决了,但是由于我们屏蔽了ValidationSettings,当我们想让错误以弹框或其他华丽的形式告知用户时又会报丢失文件的异常错误。所以此方案具有一定的局限性。

  方案三:然浏览器解析报缺少ScriptResourceMapping的错误,那么我们就在项目中添加即可。

1.在根目录下新建scripts文件夹,向里边添加jquery-1.7.2.min.jsjquery-1.7.2.js(可根据自己需要使用不同的版本)

2.在根目录下添加Global.asax文件,在Application_Start事件中添加如下代码:

ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition {         Path = "~/scripts/jquery-1.7.2.min.js", DebugPath = "~/scripts/jquery-1.7.2.js",         CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.7.2.min.js", CdnDebugPath =         "http://ajax.microsoft.com/ajax/jQuery/jquery-1.7.2.js" });

参考资料:https://connect.microsoft.com/VisualStudio/feedback/details/735928/in-asp-net-web-application-visual-basic-the-requiredfieldvalidator

     【反思】 纸上得来终觉浅,绝知此事要躬行,对于出现的问题要有针对性地思考,对症下药并去实践。刚把这三个方案都试了一下,尽管都可以解决了问题,但相对于方案三来说,前两个方案有一定的局限性。这是由于asp.net4.0升级至asp.net 4.5后,如果用到了<asp:RequiredFieldValidator/>这样的验证控件,就会出现上述问题。


0 0