Asp.net 4.5 中的Unobtrusive Validation jQuery Issue

注:本文系作者原创,可随意转载,但请注明出处。如实在不愿注明可留空,强烈反对更改原创出处。

ISSUE  LOG
: WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Please add a ScriptResourceMapping named jquery(case-sensitive).


Visual Studio 2012 WebForm 4.5 开发中,很多控件默认Enable了 Unobtrusive ValidationMode的属性(和jquery的引用相关),但并未对其进行赋值, Programmer必须手动对其进行设置。比如,在进行数据验证时使用的各种validator,以及进行authorization及authenication设置时,由于需要在前端调用jquery来进行身份验证,都默认Enable了 Unobtrusive ValidationMode。如果不对该属性进行配置,将会产生ERROR。而在前端HTML页面的<head>中引用jquery并不能解决此问题,会造成jquery的二次引用。

对此,微软在2012年4月9日给出的官方答案是
“When targeting .NET 4.5 we enable Unobtrusive Validation by default. You need to have jQuery in your project and have something like this in Global.asax to register jQuery properly:             ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition {                 Path = "~/scripts/jquery-1.4.1.min.js",                 DebugPath = "~/scripts/jquery-1.4.1.js",                 CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1.min.js",                 CdnDebugPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1.js"             }); Replacing the version of jQuery with the version you are using. You can also disable this new feature in web.config by removing the following line:     <add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" /> The templates in the RC milestone will have all of this wired up automatically for you. ”

解决方案一:
在Global.asax中对该属性进行注册。
即在Global.asax的Application_Start函数中添加如下代码。
ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition {                
                            Path = "~/scripts/jquery-1.4.1.min.js",                
                            DebugPath = "~/scripts/jquery-1.4.1.js",                
                            CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1.min.js",                
                            CdnDebugPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1.js"             });
此处引用的是1.4.1版的jquery,如需其他版本可自行更换。
解决方案二:
在Web.Config文件中,找到 <add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" /> 这一行,并将其删除。

经过验证,解决方案一很NICE。解决方案二,在Web.Config中有可能找不到该行,因此必须使用方案一。
另外,如果程序本身不需要引用JQuery,也可在Global.asax中,将该属性注册为空。代码如下:
ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition { Path = "~/Scripts/empty-file.js" });

关于这个ISSUE,微软表示将对其完善,对该属性进行自动设置。

相关链接:http://connect.microsoft.com/VisualStudio/feedback/details/735928/in-asp-net-web-application-visual-basic-the-requiredfieldvalidator-doest-work

你可能感兴趣的:(validation)