57

我正在使用 Visual Studio 2012 并创建了一个空的 ASP.Net Web Application,当我尝试将传统的验证器控件添加到新页面时,会发生此错误:

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>
4

12 回答 12

58

似乎有很多关于 ValidationSettings:UnobtrusiveValidationMode 值的不正确信息。要禁用它,您需要执行以下操作。

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

应该使用 None,而不是 WebForms 这个词来禁用此功能。

于 2013-02-05T23:06:44.133 回答
32

这是来自 MS Connect 论坛的 Microsoft 官方回答。我正在复制下面的相关文本:-

面向 .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" />
于 2012-09-17T03:30:00.523 回答
26

有关 ValidationSettings的更多信息:UnobtrusiveValidationMode

指定 ASP.NET 如何全局启用内置验证器控件以将不显眼的 JavaScript 用于客户端验证逻辑。

类型:UnobtrusiveValidationMode

默认值:无

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

例子:

    <appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
    </appSettings>
于 2013-04-05T04:38:35.637 回答
19

除了ScriptResourceDefinitionGlobal.asax 中所需的“jquery”(使用您自己的路径):

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

您还只需要在(最重要的部分)中的“jquery”之后显式添加“WebUIValidation.js”:ScriptReferenceScriptManager

       <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会由于某种原因被忽略

于 2013-07-22T21:58:21.883 回答
5

所有验证器错误都已通过此解决

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

错误必须消失享受....

于 2015-04-28T21:08:01.287 回答
3

Microsoft.JScript在您的应用程序中添加对如下的引用web.config

<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>
于 2013-12-02T16:41:03.033 回答
2

只需在您的项目中复制并粘贴任何 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"
        });
    }
于 2013-12-11T05:58:32.857 回答
1

在 Nuget 包管理器中搜索 AspNet.ScriptManager.jQuery 而不是 jquery。这样您就不必自己设置映射,只需单击一个简单的安装项目即可运行。

或者通过将此行添加到项目中 web.config 文件的 Configuration 标记来禁用 Unobtrusive Validation。

  <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
于 2015-02-20T13:07:01.933 回答
1

在“配置文件”中,改为以下行:

<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 版中不存在库,因此您需要自己添加库

于 2016-08-28T11:01:30.500 回答
0
<add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />

此行不在我的 WebConfig 中,所以:我通过将目标 .Net 版本降级到 4.0 来简单地解决了这个问题:)

于 2012-11-16T11:30:39.183 回答
0

在 web.config 中的 Visual Studio 2012 中,将 targetFramework=4.5 更改为 targetFramework=4.0

于 2013-09-01T02:34:26.230 回答
-1

我建议改为这条线

<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>
于 2016-08-28T10:27:32.643 回答