在我的网络应用程序中,我收到以下错误:
WebForms UnobtrusiveValidationMode需要ScriptResourceMapping 为'jquery'。请添加一个名为的ScriptResourceMapping 的jquery(区分大小写)。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.InvalidOperationException:WebForms UnobtrusiveValidationMode需要ScriptResourceMapping 'jQuery的'。请添加一个名为的ScriptResourceMapping 的jquery(区分大小写)。
我该如何解决?
答案 0 :(得分:66)
自.NET 4.5以来,Validators使用数据属性和有界Javascript来执行验证工作,因此.NET希望您为jQuery添加脚本引用。
有两种方法可以解决错误:
禁用UnobtrusiveValidationMode
:
将此添加到web.config:
<configuration>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
</configuration>
它将在以前的.NET版本中运行,并且只需将必要的Javascript添加到页面中以使验证器工作,而不是在jQuery文件中查找代码。这实际上是常见的解决方案。
另一种解决方案是注册脚本:
在Global.asax Application_Start
中添加映射到您的jQuery文件路径:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
ScriptManager.ScriptResourceMapping.AddDefinition("jquery",
new ScriptResourceDefinition
{
Path = "~/scripts/jquery-1.7.2.min.js",
DebugPath = "~/scripts/jquery-1.7.2.min.js",
CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.1.min.js",
CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.1.js"
});
}
MSDN的一些细节:
ValidationSettings:UnobtrusiveValidationMode 指定ASP.NET的方式 全局使内置验证器控件可以使用不引人注目的 用于客户端验证逻辑的JavaScript。
如果此键值设置为&#34;无&#34; [默认],ASP.NET应用程序 将使用4.5之前的行为(页面中的JavaScript内联) 客户端验证逻辑。
如果此键值设置为&#34; WebForms&#34;,ASP.NET将使用HTML5数据属性和后端绑定的JavaScript来添加脚本引用,以用于客户端验证逻辑。
答案 1 :(得分:6)
要在特定页面上修复此问题,需要在页面加载时设置一些验证设置。在Page_Load()
方法中写下面的代码:
protected void Page_Load(object sender, EventArgs e)
{
ValidationSettings.UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
}
它在.NET 4.5中为我工作
答案 2 :(得分:2)
我认为这是此类型错误的最佳解决方案。 所以请在下面添加一行。 当我使用MSVS 2015时,它也可以使用我的代码。
<configuration>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
</configuration>
答案 3 :(得分:2)
Jaqen H'ghar是个好消息。第三种方式是:
在应用程序启动时运行的代码:
ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition {
Path = "~/Scripts/jquery.validate.unobtrusive.min.js",
DebugPath = "~/Scripts/jquery.validate.unobtrusive.min.js"
});
答案 4 :(得分:0)
右键点击您的网站,转到属性页,然后选中辅助功能验证下的复选框,单击确定。运行网站。
答案 5 :(得分:0)
该异常表示不干扰JavaScript验证模式的问题。此问题不是特定于Sitefinity的,并且当该项目针对.NET 4.5框架并且未在web.config文件中启用4.5之前的验证时,在任何标准ASP.NET应用程序中都会发生此问题。
打开web.config文件,并确保应用程序设置中包含ValidationSettings:UnobtrusiveValidationMode:
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
答案 6 :(得分:0)
在接受答案之前,我在网站上其他地方遇到了需要jQuery以及Migrate Plugin的代码问题。
将所需的映射添加到Global.asax时,在加载需要进行简单输入验证的页面(例如具有ChangePassword ASP控件的页面)时,映射的脚本资源与已加载的jQuery和迁移脚本冲突。
将迁移插件添加为第二个映射即可解决此问题:
// required for UnobtrusiveValidationMode introduced since ASP.NET 4.5
var jQueryScriptDefinition = new ScriptResourceDefinition
{
Path = "~/Plugins/Common/jquery-3.3.1.min.js", DebugPath = "~/Plugins/Common/jquery-3.3.1.js", LoadSuccessExpression = "typeof(window.jQuery) !== 'undefined'"
};
var jQueryMigrateScriptDefinition = new ScriptResourceDefinition
{
Path = "~/Plugins/Common/jquery-migrate-3.0.1.min.js", DebugPath = "~/Plugins/Common/jquery-migrate-3.0.1.js", LoadSuccessExpression = "typeof(window.jQuery) !== 'undefined'"
};
ScriptManager.ScriptResourceMapping.AddDefinition("jquery", jQueryScriptDefinition);
ScriptManager.ScriptResourceMapping.AddDefinition("jquery", jQueryMigrateScriptDefinition);