【问题标题】:WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for jqueryWebForms UnobtrusiveValidationMode 需要 jquery 的 ScriptResourceMapping
【发布时间】:2016-09-10 19:59:51
【问题描述】:

在我的网络应用程序中,我收到以下错误:

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

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.InvalidOperationException:WebForms UnobtrusiveValidationMode 需要 ScriptResourceMapping 'jQuery'。请添加一个名为 ScriptResourceMapping jquery(区分大小写)。

我该如何解决?

【问题讨论】:

标签: c# asp.net .net validation


【解决方案1】:

从 .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 中添加映射到您的 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。

如果此键值设置为“无”[默认],则 ASP.NET 应用程序 将使用 4.5 之前的行为(页面中的 JavaScript 内联) 客户端验证逻辑。

如果此键值设置为“WebForms”,则 ASP.NET 使用 HTML5 数据属性和来自添加的脚本引用的后期绑定 JavaScript 用于客户端验证逻辑。

【讨论】:

  • 最佳解决方案在 .Net 4.5.2 上为我解决了这个问题
【解决方案2】:

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

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

它在 .NET 4.5 中对我有用

【讨论】:

    【解决方案3】:

    我认为这是针对这种类型错误的最佳解决方案。 所以请添加以下行。 当我使用 MSVS 2015 时,它也适用于我的代码。

    &lt;configuration&gt;
    &lt;appSettings&gt;
    &lt;add key="ValidationSettings:UnobtrusiveValidationMode" value="None" /&gt;
    &lt;/appSettings&gt;
    &lt;/configuration&gt;

    【讨论】:

    • 这是一个更好的解决方案。如果您添加带有路径定义的 ScriptManager 并希望使用 Bootstrap 中的 JQuery 或 JS 或 Ajax,则可能会发生冲突。我确定有一种解决方法,但我发现这种方法效果更好。
    【解决方案4】:

    Jaqen H'ghar 很到位。第三种方法是:

    1. 转到管理 NuGet 包
    2. 安装 Microsoft.jQuery.Unobtrusive.Validation
    3. 打开 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"
    });
    

    【讨论】:

    • 这对我有用(.NET 4.6),但我正在阅读一本书,我正在从一个没有全局的“ASP.NET 空网站”项目中工作.asax,所以我不得不在项目中添加一个“全局应用程序类”,它添加了 Global.asax 文件。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      异常表明不显眼的 JavaScript 验证模式存在问题。当项目面向 .NET 4.5 框架且未在 web.config 文件中启用 4.5 之前的验证时,此问题不是 Sitefinity 特定的,并且会在任何标准 ASP.NET 应用程序中发生。

      打开web.config文件,确保应用设置中有ValidationSettings:UnobtrusiveValidationMode:

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

      【讨论】:

        【解决方案7】:

        除了接受的答案之外,我在网站上其他地方的代码遇到了问题,需要 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);
        

        【讨论】:

          猜你喜欢
          • 2016-05-26
          • 2016-06-17
          • 2013-03-27
          • 2013-05-15
          • 2013-01-21
          • 2014-06-16
          • 2017-05-21
          • 1970-01-01
          相关资源
          最近更新 更多