ASP.Net 2012 使用 jQuery 进行不显眼的验证

Posted

技术标签:

【中文标题】ASP.Net 2012 使用 jQuery 进行不显眼的验证【英文标题】:ASP.Net 2012 Unobtrusive Validation with 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>

【问题讨论】:

我刚刚找到了在 ASP.Net WebForms 中启用非侵入式客户端验证所需的步骤。 I created a blog with the solution 这里和那里可能有点突兀... WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Please add a ScriptResourceMapping named jquery(case-sensitive)的可能重复 【参考方案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

以上是关于ASP.Net 2012 使用 jQuery 进行不显眼的验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 在 ASP.NET 中进行 AJAX 回调

使用带有 jquery ajax 的 ASP.NET MVC 验证?

如何使用带有 asp.net 的 jQuery 进行 onclientclick 回发

如何使用asp.net按钮通过jquery进行验证然后进入后台代码web表单

使用 jQuery $.ajax 进行 ASP.NET MVC 验证

asp.net mvc4 更改 jquery 版本