ASP.Net 2012 使用 jQuery 进行不显眼的验证
Posted
技术标签:
【中文标题】ASP.Net 2012 使用 jQuery 进行不显眼的验证【英文标题】:ASP.Net 2012 Unobtrusive Validation with jQuery 【发布时间】:2012-09-09 05:56:04 【问题描述】:我在使用 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>
【问题讨论】:
我刚刚找到了在 ASP.Net WebForms 中启用非侵入式客户端验证所需的步骤。 I created a blog with the solution 这里和那里可能有点突兀... WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Please add a ScriptResourceMapping named jquery(case-sensitive)的可能重复 【参考方案1】:这是official Microsoft answer from the MS Connect forums。我正在复制下面的相关文本:-
当面向 .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" />
【讨论】:
您能否确认 jQuery 已加载,并可能使用一些虚拟 jquery 代码进行测试,它是否按预期工作?如果您的 jquery 文件位于~/scripts/jquery-1.4.1.js
,它应该可以正常工作
是的,我可以确认。我将代码上传到我的 Github 网站。 github.com/jupaol/LearningProjects/blob/master/VS%202012/src/…【参考方案2】:
<add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />
这一行不在我的 WebConfig 中,所以: 我通过将目标 .Net 版本降级到 4.0 来简单地解决了这个问题 :)
【讨论】:
【参考方案3】:似乎有很多关于 ValidationSettings:UnobtrusiveValidationMode 值的不正确信息。要禁用它,您需要执行以下操作。
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
应该使用 None,而不是 WebForms 这个词来禁用此功能。
【讨论】:
我从一个新的 Internet MVC4 项目开始并添加了 N2 CMS。我收到了这个错误,这个答案为我解决了这个问题。谢谢! 这解决了我在将创建为 .NET 4.0 的 ASP.NET WebForms 项目升级到 4.5 时出现的问题 这一行是对的,但这一行将在 web.config 中 但现在我面临另一个问题,它关闭了我的验证,现在热打开验证n【参考方案4】:更多信息ValidationSettings:UnobtrusiveValidationMode
指定 ASP.NET 如何全局启用内置验证器控件以使用不显眼的 javascript 进行客户端验证逻辑。
类型:UnobtrusiveValidationMode
默认值:无
备注: 如果此键值设置为 "None" [默认],则 ASP.NET 应用程序将使用 4.5 之前的行为(页面中的 JavaScript 内联)进行客户端-侧面验证逻辑。如果此键值设置为 "WebForms",则 ASP.NET 将 HTML5 数据属性和来自添加的脚本引用的后期绑定 JavaScript 用于客户端验证逻辑。
例子:
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
【讨论】:
【参考方案5】:除了 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
(最重要的部分)中显式添加“WebUIValidation.js”“jquery”ScriptReference
:
<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”之前添加它) - 客户端验证将完全被破坏:
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
将由于某种原因被忽略
【讨论】:
【参考方案6】:在 Visual Studio 2012 的 web.config 中,将 targetFramework=4.5 更改为 targetFramework=4.0
【讨论】:
【参考方案7】:在您的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>
【讨论】:
为什么需要Microsoft.JScript
?没有任何意义,真的!
您将 ValidationSettings:UnobtrusiveValidationMode 设置为 none。这就是让它发挥作用的原因。【参考方案8】:
只需复制并粘贴任何 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"
);
【讨论】:
【参考方案9】:在 Nuget 包管理器中搜索 AspNet.ScriptManager.jQuery 而不是 jquery。 这样您就不必自己设置映射,只需单击一下简单的安装项目即可运行。
或者通过将此行添加到项目中 web.config 文件的 Configuration 标记来禁用 Unobtrusive Validation。
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
【讨论】:
【参考方案10】:所有验证器错误都已解决
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
错误必须消失享受....
【讨论】:
【参考方案11】:我建议改为这条线
<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>
【讨论】:
这可以被浏览器的检查元素开发者选项跳过。在“Web.config”中添加以下行 【参考方案12】:在“配置文件”中改为:
<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版本的库不存在所以你需要自己添加库
【讨论】:
页面昨天运行良好,同事将 targetFramework="4.6.1" 添加到 web.config,今天每个人都获得了最新信息,并且他们的页面与 ASP.Net 验证器中断。三小时后,在查看 jquery 文件和所有错误的地方后,我意识到这是依赖于框架的,并看到了你的答案。谢谢+1以上是关于ASP.Net 2012 使用 jQuery 进行不显眼的验证的主要内容,如果未能解决你的问题,请参考以下文章
使用 jQuery 在 ASP.NET 中进行 AJAX 回调
使用带有 jquery ajax 的 ASP.NET MVC 验证?
如何使用带有 asp.net 的 jQuery 进行 onclientclick 回发
如何使用asp.net按钮通过jquery进行验证然后进入后台代码web表单