.net WebForms UnobtrusiveValidationMode需要jquery的ScriptResourceMapping

vhipe2zx  于 2023-04-07  发布在  .NET
关注(0)|答案(7)|浏览(111)

在我的Web应用程序中,我得到以下错误:
WebForms UnobtrusiveValidationMode需要“jquery”的ScriptResourceMapping。请添加名为jquery的ScriptResourceMapping(区分大小写)。
说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误及其在代码中的起源位置的详细信息。
异常详细信息:System.InvalidOperationException:WebForms UnobtrusiveValidationMode需要“jquery”的ScriptResourceMapping。请添加名为jquery的ScriptResourceMapping(区分大小写)。
我该怎么解决呢?

zpf6vheq

zpf6vheq1#

从.NET 4.5开始,验证器使用数据属性和绑定JavaScript来进行验证工作,因此.NET希望您为jQuery添加脚本引用。

解决错误的方法有两种:

禁用UnobtrusiveValidationMode
将以下内容添加到web.config:

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

它将像以前的.NET版本一样工作,只需要在页面中添加必要的JavaScript来使验证器工作,而不是在jQuery文件中查找代码。这实际上是常见的解决方案。
另一种解决方案是注册脚本:
在Global.asax Application_Start中添加Map到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.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进行客户端验证逻辑。

如果此键值设置为“None”[默认值],ASP.NET应用程序将使用4.5之前的行为(页面中的JavaScript内联)进行客户端验证逻辑。
如果此键值设置为“WebForms”,则ASP.NET将使用HTML5数据属性和后期绑定的JavaScript(来自添加的脚本引用)来进行客户端验证逻辑。

kninwzqo

kninwzqo2#

要解决这个问题,在特定的页面需要设置一些验证设置页面加载时。写下面的代码在Page_Load()方法:

protected void Page_Load(object sender, EventArgs e)
    {
        ValidationSettings.UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
    }

它在.NET 4.5中为我工作

v440hwme

v440hwme3#

我认为这是这个类型错误的最佳解决方案。所以请添加下面的行。当我使用MSVS 2015时,它也可以工作我的代码。
<configuration>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
</configuration>

3htmauhk

3htmauhk4#

Jaqen H'ghar说得很对。第三种方法是:
1.转到管理NuGet包
1.安装Microsoft.jQuery.Unobtrusive.Validation
1.打开Global.asax.cs文件,并在Application_Start方法中添加以下代码
在应用程序启动时运行的代码:

ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition {
    Path = "~/Scripts/jquery.validate.unobtrusive.min.js",
    DebugPath = "~/Scripts/jquery.validate.unobtrusive.min.js"
});
vwoqyblh

vwoqyblh5#

右键单击您的网站,转到属性页并选中辅助功能验证下的复选框,单击“确定”。运行网站。

smdncfj3

smdncfj36#

此异常指示非干扰性JavaScript验证模式存在问题。此问题不是Sitefinity特定的,当项目以.NET 4.5 framework为目标且未在web.config文件中启用4.5之前的验证时,任何标准ASP.NET应用程序都会出现此问题。
打开web.config文件,确保应用程序设置中有ValidationSettings:UnobtrusiveValidationMode:

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

dphi5xsq7#

除了公认的答案之外,我在网站上的其他地方遇到了需要jQuery沿着Migrate Plugin的代码问题。
当所需的Map被添加到Global.asax时,当加载一个需要不显眼的验证的页面(例如一个带有ChangePassword ASP控件的页面)时,Map的脚本资源与已经加载的jQuery和migrate脚本冲突。
添加migrate插件作为第二个Map解决了这个问题:

// 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);

相关问题