WebForms UnobtrusiveValidationMode需要jquery

时间:2016-05-14 17:54:04

标签: c# asp.net .net validation

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

  

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

     

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

     

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

我该如何解决?

7 个答案:

答案 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是个好消息。第三种方式是:

  1. 转到管理NuGet包
  2. 安装Microsoft.jQuery.Unobtrusive.Validation
  3. 打开Global.asax.cs文件并在Application_Start方法
  4. 中添加此代码

    在应用程序启动时运行的代码:

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