【问题标题】:ASP.Net 2012 Unobtrusive Validation with jQueryASP.Net 2012 使用 jQuery 进行不显眼的验证
【发布时间】:2012-09-09 05:56:04
【问题描述】:

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

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>

【问题讨论】:

标签: c# asp.net


【解决方案1】:

这是official Microsoft answer from the MS Connect forums。我正在复制下面的相关文本:-

当面向 .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" />

【讨论】:

  • 您能否确认 jQuery 已加载,并可能使用一些虚拟 jquery 代码进行测试,它是否按预期工作?如果您的 jquery 文件位于 ~/scripts/jquery-1.4.1.js,它应该可以正常工作
  • 是的,我可以确认。我将代码上传到我的 Github 网站。 github.com/jupaol/LearningProjects/blob/master/VS%202012/src/…
【解决方案2】:
<add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 我从一个新的 Internet MVC4 项目开始并添加了 N2 CMS。我收到了这个错误,这个答案为我解决了这个问题。谢谢!
    • 这解决了我在将创建为 .NET 4.0 的 ASP.NET WebForms 项目升级到 4.5 时出现的问题
    • 这一行是对的,但这一行将在 web.config 中
    • 但现在我面临另一个问题,它关闭了我的验证,现在热打开验证n
    【解决方案4】:

    更多信息ValidationSettings:UnobtrusiveValidationMode

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

    类型:UnobtrusiveValidationMode

    默认值:无

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

    例子:

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

    【讨论】:

      【解决方案5】:

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

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

      您另外只需要在ScriptManager(最重要的部分)中显式添加“WebUIValidation.js”“jquery”ScriptReference

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

          • 为什么需要Microsoft.JScript?没有任何意义,真的!
          • 您将 ValidationSettings:UnobtrusiveValidationMode 设置为 none。这就是让它发挥作用的原因。
          【解决方案8】:

          只需复制并粘贴任何 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"
                  });
              }
          

          【讨论】:

            【解决方案9】:

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

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

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

            【讨论】:

              【解决方案10】:

              所有验证器错误都已解决

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

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

              【讨论】:

                【解决方案11】:

                我建议改为这条线

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

                【讨论】:

                • 这可以被浏览器的检查元素开发者选项跳过。在“Web.config”中添加以下行
                【解决方案12】:

                在“配置文件”中改为:

                <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版本的库不存在所以你需要自己添加库

                【讨论】:

                • 页面昨天运行良好,同事将 targetFramework="4.6.1" 添加到 web.config,今天每个人都获得了最新信息,并且他们的页面与 ASP.Net 验证器中断。三小时后,在查看 jquery 文件和所有错误的地方后,我意识到这是依赖于框架的,并看到了你的答案。谢谢+1
                猜你喜欢
                • 2012-12-09
                • 2023-03-14
                • 1970-01-01
                • 2011-12-22
                • 2012-11-16
                • 1970-01-01
                • 1970-01-01
                • 2011-10-17
                • 2012-08-17
                相关资源
                最近更新 更多