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

我正在使用Visual Studio 2012构build一个Web应用程序。我试图在我的文本框中添加字数。 但是,添加了JavaScript代码和HTML代码后。 我收到如上所述的错误。

这是我的javascript codeds

代码:

function validateLimit(obj, divID, maxchar) { objDiv = get_object(divID); if (this.id) obj = this; var remaningChar = maxchar - trimEnter(obj.value).length; if (objDiv.id) { objDiv.innerHTML = remaningChar + " characters left"; } if (remaningChar <= 0) { obj.value = obj.value.substring(maxchar, 0); if (objDiv.id) { objDiv.innerHTML = "0 characters left"; } return false; } else { return true; } } function get_object(id) { var object = null; if (document.layers) { object = document.layers[id]; } else if (document.all) { object = document.all[id]; } else if (document.getElementById) { object = document.getElementById(id); } return object; } function trimEnter(dataStr) { return dataStr.replace(/(\r\n|\r|\n)/g, ""); } 

母版页中的服务器代码

 <script type="text/javascript" src="js/JScript.js" ></script> 

ASPX代码,(Html代码)

 <tr> <th style="width: 595px; height: 135px;">Official Report :</th> <td colspan="4" style="height: 135px"> <asp:TextBox ID="tbofficial" runat="server" Height="121px" TextMode="MultiLine" Width="878px" MaxLength="500" ToolTip="Summary:(500 characters)" onkeyup="return validateLimit(this, 'lblMsg1', 500)" ></asp:TextBox> <div id="lblMsg1">500 characters left</div> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="tbofficial" Display="Dynamic" SetFocusOnError="True">*</asp:RequiredFieldValidator> <br /> <asp:Label ID="lblmsg" runat="server"></asp:Label> <br /> <br /> <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" /> <asp:Button ID="btnClear" runat="server" Text="Clear" OnClick="btnClear_Click" /> </td> </tr> 

你需要一个web.config键来启用4.5之前的validation模式。

更多关于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> 

我select了遵循错误的指示,而不是禁用一个新function。 在我的global.asax.cs中我添加了:

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

这来自一个MSDN的博客文章 ,其中强调了脚本资源映射的一些优点。 我特别感兴趣的是集中控制基于“debug = true”,EnableCDN等脚本文件的交付。

至less有三种方法可以禁止使用不显眼的JavaScript进行客户端validation:

  1. 将以下内容添加到web.config文件中:
     <configuration> <appSettings> <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" /> </appSettings> </configuration> 
  2. System.Web.UI.ValidationSettings.UnobtrusiveValidationMode静态属性的值设置为System.Web.UI.UnobtrusiveValidationMode.None
  3. System.Web.UI.Page.UnobtrusiveValidationMode实例属性的值设置为System.Web.UI.UnobtrusiveValidationMode.None

要禁用每个页面的function,我宁愿使用page指令来设置Page.UnobtrusiveValidationMode属性:

 <%@ Page Language="C#" UnobtrusiveValidationMode="None" %> 

在新版本的ASP.NET中默认启用不显眼validation。 不引人注目的validation旨在通过用一个使用jQuery的小型JavaScript库replace执行validation的内联JavaScript来减小页面大小。

您可以通过编辑web.config来禁用它以包含以下内容:

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

或者更好地通过修改global.asax中的Application_Start方法来正确地configuration它:

 void Application_Start(object sender, EventArgs e) { RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes); ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition { Path = "/~Scripts/jquery-2.1.1.min.js" } ); } 

C#和VB中从ASP.NET 4.5.1开始的第399页提供了关于不显眼validation的好处以及configuration它的演练。

对于那些正在寻找RouteConfig。 当您将Visual Studio中的新项目添加到App_Code文件夹时,它会自动添加。 内容如下所示:

 using System; using System.Collections.Generic; using System.Web; using System.Web.Routing; using Microsoft.AspNet.FriendlyUrls; namespace @default { public static class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { var settings = new FriendlyUrlSettings(); settings.AutoRedirectMode = RedirectMode.Permanent; routes.EnableFriendlyUrls(settings); } } } 

我相信我遇到了同样的窘境。 我开始遇到问题时,我改变了:

 </system.web> <httpRuntime targetFramework="4.5"/> 

这给出了你上面描述的错误信息。

添加:

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

解决了这个问题, 但是这会让你的validation控件/脚本抛出Javascript运行时错误。 如果您更改为:

 </system.web> <httpRuntime targetFramework="4.0"/> 

你应该没问题, 但是你必须确保你的代码的其他部分的行为符合你的期望。 您可能还必须放弃仅在4.5版以前提供的一些新function。

PS强烈build议您在实施此解决scheme之前阅读以下内容。 特别是,如果您使用asynchronousfunction:

https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/

更新四月2017年:经过一些实验和testing后,我想出了一个组合工作:

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

有:

jQuery版本1.11.3

给b_levitt添加一些更多的信息在global.asax上:

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; using System.Web.UI; namespace LoginPage { public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { string JQueryVer = "1.11.3"; ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition { Path = "~/js/jquery-" + JQueryVer + ".min.js", DebugPath = "~/js/jquery-" + JQueryVer + ".js", CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".min.js", CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".js", CdnSupportsSecureConnection = true, LoadSuccessExpression = "window.jQuery" }); } } } 

在你的default.aspx

 <body> <form id="UserSectionForm" runat="server"> <asp:ScriptManager ID="ScriptManager" runat="server"> <Scripts> <asp:ScriptReference Name="jquery" /> </Scripts> </asp:ScriptManager> <%--rest of your markup goes here--%> </form> </body> 

由于控制validation程序发生问题。 只需将J Query引用添加到您的网页中,然后在web.config文件中添加validation设置即可解决此问题。 我也面临同样的问题,下面给了我的问题的解决scheme。

步骤1:

代码在网页中添加

第2步 :

代码被添加到Web.config文件中

它会解决你的问题。

如果在查看其他答案后,您的代码或configuration看起来正确,那么我也在部署(开发登台)网站时遇到了这个问题,并发现问题是Global.asax文件已被重命名。 (由我,几天之前搞乱customErrors和Application_Error)