ASP.Net 2012与jQuery的不显眼的validation

我正在玩Visual Studio 2012,并创build了一个空的ASP.Net Web应用程序 ,当我试图将传统的validation控件添加到新的页面时,会发生此错误:

WebForms UnobtrusiveValidationMode需要一个ScriptResourceMapping作为'jquery'。 请添加一个名为jquery(区分大小写)的ScriptResourceMapping。

有什么步骤来解决它?

这是我的页面标记:

<asp:Panel runat="server" ID="pnlUsername" GroupingText="Username settings"> <div> <asp:Label ID="usernameLabel" Text="Please enter your username" runat="server" AssociatedControlID="username" /> </div> <div> <asp:TextBox runat="server" ID="username" /> <asp:RequiredFieldValidator ErrorMessage="The username is required" ControlToValidate="username" runat="server" Text=" - Required" /> </div> </asp:Panel> 

好像有很多有关ValidationSettings:UnobtrusiveValidationMode值的错误信息。 要禁用它,您需要执行以下操作。

 <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" /> 

单词None,而不是WebForms应该用来禁用这个function。

这是来自MS Connect论坛的官方Microsoft回答 。 我正在复制下面的相关文字:

当针对.NET 4.5 Unobtrusivevalidation默认启用。 你需要在你的项目中有jQuery,并在Global.asax中有这样的东西来正确注册jQuery:

 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" }); 

用您正在使用的版本replacejQuery的版本。

您也可以通过删除以下行来在web.config中禁用此新function:

 <add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" /> 

更多关于ValidationSettings的信息:UnobtrusiveValidationMode

指定ASP.NET如何全局启用内置的validation器控件,以便将不显眼的JavaScript用于客户端validation逻辑。

types:UnobtrusiveValidationMode

默认值:无

备注:如果此键值设置为“无” [默认值],则ASP.NET应用程序将使用4.5版之前的行为 (页面中的JavaScript内联)用于客户端validation逻辑。 如果此键值设置为“WebForms” ,则ASP.NET将使用HTML5数据属性和来自添加的脚本引用的延迟JavaScript,以用于客户端validation逻辑。

例:

  <appSettings> <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" /> </appSettings> 

除了Global.asax中所需的“jquery” ScriptResourceDefinition (使用你自己的path):

  protected void Application_Start(object sender, EventArgs e) { ScriptManager.ScriptResourceMapping.AddDefinition( "jquery", new ScriptResourceDefinition { Path = "/static/scripts/jquery-1.8.3.min.js", DebugPath = "/static/scripts/jquery-1.8.3.js", CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js", CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.js", CdnSupportsSecureConnection = true, LoadSuccessExpression = "jQuery" }); } 

另外您只需要在ScriptManager “jquery” ScriptReference 之后显式添加“WebUIValidation.js”(最重要的部分):

  <asp:ScriptManager runat="server" EnableScriptGlobalization="True" EnableCdn="True"> <Scripts> <asp:ScriptReference Name="jquery" /> <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" /> </Scripts> </asp:ScriptManager> 

如果你在“jquery”之前添加它,或者如果你不添加任何一个或两个都( ASP.Net然后将自动添加“jquery”之前) – 客户端validation将被彻底打破:

http://connect.microsoft.com/VisualStudio/feedback/details/748064/unobtrusive-validation-breaks-with-a-script-manager-on-the-page

你根本不需要任何这些NuGet包,也不需要在你的博客中提到的任何额外的ScriptReference (其中一些只是重复的,甚至是完全不必要的膨胀 – 因为它们是由ASP.Net自动添加的)。

编辑:你不需要明确地添加“WebForms.js”(从示例中删除它) – 如果你这样做,它的LoadSuccessExpression将被忽略由于某种原因

在您的web.config的应用程序中添加对Microsoft.JScript的引用,如下所示:

 <configuration> <system.web> <compilation debug="true" targetFramework="4.5"> <assemblies> <add assembly="Microsoft.JScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> </assemblies> </compilation> <httpRuntime targetFramework="4.5"/> </system.web> <appSettings> <add key="ValidationSettings:UnobtrusiveValidationMode" value="none"/> </appSettings> </configuration> 

所有的validation错误已经被解决了

  <appSettings> <add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/> 

错误必须消失享受….

只需复制并粘贴项目中的任何JQuery文件,然后添加一个Global.asax文件并修改它,如下所示:

我只是将JQuery文件粘贴到我的项目中,并在Global.asax文件中添加引用:

 protected void Application_Start(object sender, EventArgs e) { ScriptManager.ScriptResourceMapping.AddDefinition( "jquery", new ScriptResourceDefinition { Path = "~/jquery-1.10.2.js", DebugPath = "~/jquery-1.10.2.js", CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.10.2.min.js", CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.10.2.js", CdnSupportsSecureConnection = true, LoadSuccessExpression = "jQuery" }); } 

在Nuget包pipe理器中searchAspNet.ScriptManager.jQuery而不是jquery。 这样你就不需要自己设置映射,项目只需点击一下简单的安装即可。

或者通过将此行添加到项目的web.config文件的configuration标签中,禁用“不显眼validation”(Unobtrusive Validation)。

  <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" /> 
 <add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" /> 

这行不在我的WebConfig所以:我简单地解决了这个降级目标。净版本为4.0 🙂

在web.config的visual studio 2012中将targetFramework = 4.5更改为targetFramework = 4.0

在“configuration文件”,而不是这行:

 <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> 

由此行:

 <compilation debug="true" targetFramework="4.0" /> <httpRuntime targetFramework="4.0" /> 

这个错误,因为在版本4.0库属于“asp:RequiredFieldValidator”存在,但在版本4.5库不存在,所以你需要自己添加库

我build议改为这行

 <div> <asp:TextBox runat="server" ID="username" /> <asp:RequiredFieldValidator ErrorMessage="The username is required" ControlToValidate="username" runat="server" Text=" - Required" /> </div> 

由这条线

 <div> <asp:TextBox runat="server" ID="username" required /> </div>