[英]ASP.Net 2012 Unobtrusive Validation with jQuery
我正在使用Visual Studio 2012,并且创建了一个空的ASP.Net Web应用程序 ,当我尝试将传统的验证器控件添加到新页面时,发生此错误:
WebForms UnobtrusiveValidationMode需要针对“ jquery”的ScriptResourceMapping。 请添加一个名为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)来禁用此功能。
这是微软在MS Connect论坛上提供的官方答案 。 我正在复制以下相关文本:
面向.NET 4.5时,默认启用非侵入式验证。 您需要在项目中安装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"
});
用您使用的版本替换jQuery的版本。
您还可以通过删除以下行来在web.config中禁用此新功能:
<add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />
有关ValidationSettings:UnobtrusiveValidationMode的更多信息
指定ASP.NET如何在全局范围内使内置验证器控件使用不引人注目的JavaScript进行客户端验证逻辑。
类型:UnobtrusiveValidationMode
默认值:无
备注:如果此键值设置为“无” (默认值),则ASP.NET应用程序将使用4.5之前的行为 (页面中的JavaScript内联)进行客户端验证逻辑。 如果此键值设置为“ WebForms” ,则ASP.NET将使用HTML5数据属性和来自添加的脚本参考的后期绑定JavaScript进行客户端验证逻辑。
例:
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
Global.asax中所需的“ jquery” ScriptResourceDefinition
除外(使用您自己的路径):
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”之前自动添加它)-客户端验证将被完全破坏:
您根本不需要博客中提到的所有这些NuGet软件包,也不需要任何其他ScriptReference
(其中一些只是重复的,甚至是完全不必要的膨胀-因为它们会由ASP.Net
自动添加)。
编辑:您也不需要显式添加“ WebForms.js”(从示例中将其删除)-如果这样做,由于某些原因,它的LoadSuccessExpression
将被忽略。
所有的验证器错误都已经解决了
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
错误必须消失享受。
在您的应用程序的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>
只需将任何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软件包管理器中,搜索AspNet.ScriptManager.jQuery而不是jquery。 通过这种方式,您不必自己设置映射,项目只需单击一下即可安装。
或通过将这一行添加到项目中web.config文件的Configuration标记中来禁用Unobtrusive Validation。
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
在“配置文件”中改为:
<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中库不存在,因此您需要自己添加库
<add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />
此行不在我的WebConfig中,因此:我通过将目标.Net版本降级为4.0 来解决此问题 :)
在Visual Studio 2012中的web.config中,将targetFramework = 4.5更改为targetFramework = 4.0
我建议改成这行
<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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.