【问题标题】:WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Please add a ScriptResourceMapping named jquery(case-sensitive)WebForms UnobtrusiveValidationMode 需要 'jquery' 的 ScriptResourceMapping。请添加一个名为 jquery 的 ScriptResourceMapping(区分大小写)
【发布时间】:2013-05-15 16:23:18
【问题描述】:

我正在使用 Visual Studio 2012 构建一个 Web 应用程序。 我正在尝试将字数添加到我的文本框中。 但是在添加了 javascript 代码和 html 代码之后。我收到上述错误。

这是我的 javascript 代码

代码:

function validateLimit(obj, divID, maxchar) {

objDiv = get_object(divID);

if (this.id) obj = this;

var remaningChar = maxchar - trimEnter(obj.value).length;

if (objDiv.id) {
    objDiv.innerHTML = remaningChar + " characters left";
}
if (remaningChar <= 0) {
    obj.value = obj.value.substring(maxchar, 0);
    if (objDiv.id) {
        objDiv.innerHTML = "0 characters left";
    }
    return false;
}
else
{ return true; }
}

function get_object(id) {
var object = null;
if (document.layers) {
    object = document.layers[id];
} else if (document.all) {
    object = document.all[id];
} else if (document.getElementById) {
    object = document.getElementById(id);
}
return object;
}

function trimEnter(dataStr) {
return dataStr.replace(/(\r\n|\r|\n)/g, "");
}

母版页中的服务器代码

<script type="text/javascript" src="js/JScript.js" ></script>

ASPX 代码,(Html 代码)

<tr>
<th style="width: 595px; height: 135px;">Official Report :</th>
<td colspan="4" style="height: 135px">
  <asp:TextBox ID="tbofficial" runat="server" Height="121px" TextMode="MultiLine" Width="878px" MaxLength="500"   ToolTip="Summary:(500 characters)" onkeyup="return validateLimit(this, 'lblMsg1', 500)" ></asp:TextBox>
  <div id="lblMsg1">500 characters left</div>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
        ControlToValidate="tbofficial" Display="Dynamic" 
        SetFocusOnError="True">*</asp:RequiredFieldValidator>
  <br />
  <asp:Label ID="lblmsg" runat="server"></asp:Label>
  <br />
  <br />
        <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />
  <asp:Button ID="btnClear" runat="server" Text="Clear" OnClick="btnClear_Click" />
        </td>
</tr>

【问题讨论】:

    标签: html asp.net visual-studio word-count


    【解决方案1】:

    您需要一个 web.config 密钥来启用 4.5 之前的验证模式。

    关于ValidationSettings:UnobtrusiveValidationMode的更多信息:

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

    类型:UnobtrusiveValidationMode

    默认值:无

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

    例子:

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

    【讨论】:

    • 为什么这甚至是一个问题...为什么不能默认禁用它?无论如何,谁会希望启用此功能?不管答案是什么,我添加了这个键,但我仍然收到错误...
    • 如果您使用targetFramework="4.5",“无”似乎不是默认值。我必须将此设置显式添加到我的 web.config 中才能正常工作。
    • 提醒:web.Config文件中的父元素应该是根元素,即。
    • 我安装了.Net 4.5.2,然后我陷入了这个问题。我假设 4.5.2 的 Windows 更新更改了机器配置。
    • 除非您想赢得“最大页面大小”竞赛,否则为什么要禁用不显眼的验证?
    【解决方案2】:

    我没有禁用新功能,而是选择按照错误说明进行操作。在我的 global.asax.cs 中,我添加了:

    protected void Application_Start(object sender, EventArgs e)
    {
        string JQueryVer = "1.7.1";
        ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition
        {
            Path = "~/Scripts/jquery-" + JQueryVer + ".min.js",
            DebugPath = "~/Scripts/jquery-" + JQueryVer + ".js",
            CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".min.js",
            CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".js",
            CdnSupportsSecureConnection = true,
            LoadSuccessExpression = "window.jQuery"
        });
    }
    

    这来自msdn blog post,它突出了脚本资源映射的一些优点。我特别感兴趣的是基于“debug=true”、EnableCDN 等对脚本文件的交付进行集中控制。

    【讨论】:

    • @b_levitt 我是 .NET 的新手,并且通过了您提到的解决方案。它确实有很大帮助,但只是好奇如何调用 jQuery 函数。例如,我有一个 jQuery 菜单,在实现上述方法后,我正在使用 &lt;script type='text/javascript'&gt; //&lt;![CDATA[ $(document).ready(function () { $("#menu").menu(); }) //]] &lt;/script&gt;。这是正确的方法吗?
    • 创建了一个要点:gist.github.com/monoman/ca42e54cdac25ef2284b 通过不对 jQueryVer 值进行硬编码来改进;
    • 注意:我添加了这两个 Nuget 包,一切顺利。必须将 /bin 文件夹中的新文件复制到生产服务器..nuget.org/packages/Microsoft.AspNet.Web.Optimization nuget.org/packages/AspNet.ScriptManager.jQuery
    • 取决于您的用例,哪个是正确的。我们的应用没有任何验证(纯粹的内容交付),我们更愿意将其全部关闭。
    【解决方案3】:

    在新版本的 ASP.NET 中默认启用不显眼的验证。不显眼的验证旨在通过使用使用 jQuery 的小型 JavaScript 库替换用于执行验证的内联 JavaScript 来减小页面大小。

    您可以通过编辑 web.config 以包含以下内容来禁用它:

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

    或者更好的是通过修改 global.asax 中的 Application_Start 方法来正确配置它:

    void Application_Start(object sender, EventArgs e) 
    {
        RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes);
        ScriptManager.ScriptResourceMapping.AddDefinition("jquery",
            new ScriptResourceDefinition
            {
                Path = "/~Scripts/jquery-2.1.1.min.js"
            }
        );
    }
    

    Beginning ASP.NET 4.5.1 in C# and VB 的第 399 页讨论了不显眼的验证的好处以及配置它的演练。

    对于那些寻找 RouteConfig。当您在 Visual Studio 中创建一个新项目到 App_Code 文件夹时,它会自动添加。内容如下所示:

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Routing;
    using Microsoft.AspNet.FriendlyUrls;
    
    namespace @default
    {
        public static class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                var settings = new FriendlyUrlSettings();
                settings.AutoRedirectMode = RedirectMode.Permanent;
                routes.EnableFriendlyUrls(settings);
            }
        }
    }
    

    【讨论】:

    • RouteConfig 从何而来?
    • @Lucas 当您使用 Visual Studio 创建一个新项目时,它会将 RouteConfig.cs 添加到 App_Code 文件夹中。请参阅编辑后的答案。
    • 这仅适用于 MVC 项目吗?似乎不适用于网站(没有项目文件)(WebForms)
    • @user0474975 抱歉,我不记得了,目前也没有可以测试的环境,但我希望它可以正常工作。
    • @denver 我想通了。只需删除“RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes);”行即可在 WebSite/WebForms 站点中工作并在上面的行中声明 ScriptResourceDefinition 对象,而不是直接在 AddDefinition 方法声明中。但是,您的回答为我指明了正确的方向。
    【解决方案4】:

    至少有三种方法可以禁用不显眼的 JavaScript 进行客户端验证:

    1. 将以下内容添加到 web.config 文件中:
      <configuration>
        <appSettings>
          <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
        </appSettings>
      </configuration>
    2. 将System.Web.UI.ValidationSettings.UnobtrusiveValidationMode静态属性的值设置为System.Web.UI.UnobtrusiveValidationMode.None
    3. 将System.Web.UI.Page.UnobtrusiveValidationMode 实例属性的值设置为System.Web.UI.UnobtrusiveValidationMode.None

    要按页面禁用该功能,我更喜欢使用 page 指令设置 Page.UnobtrusiveValidationMode 属性:

    <%@ Page Language="C#" UnobtrusiveValidationMode="None" %>
    

    【讨论】:

    • 对每页设置的好调用。
    【解决方案5】:

    为 b_levitt 的答案添加更多内容... 在 global.asax 上:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.SessionState;
    using System.Web.UI;
    
    namespace LoginPage
    {
        public class Global : System.Web.HttpApplication
        {
            protected void Application_Start(object sender, EventArgs e)
            {
                string JQueryVer = "1.11.3";
                ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition
                {
                    Path = "~/js/jquery-" + JQueryVer + ".min.js",
                    DebugPath = "~/js/jquery-" + JQueryVer + ".js",
                    CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".min.js",
                    CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".js",
                    CdnSupportsSecureConnection = true,
                    LoadSuccessExpression = "window.jQuery"
                });
            }
        }
    }
    

    在你的 default.aspx 上

    <body>
       <form id="UserSectionForm" runat="server">
         <asp:ScriptManager ID="ScriptManager" runat="server">
              <Scripts>
                   <asp:ScriptReference Name="jquery" />
              </Scripts>
         </asp:ScriptManager>
         <%--rest of your markup goes here--%>         
       </form>
    </body>
    

    【讨论】:

      【解决方案6】:

      问题是由控制验证器引起的。只需将 J Query 引用添加到您的网页,如下所示,然后在您的 web.config 文件中添加验证设置即可解决该问题。我也遇到了同样的问题,下面给出了我的问题的解决方案。

      第一步:

      第二步:

      它会解决你的问题。

      【讨论】:

      • UnobtrusiveValidationMode 设置为 none 后为什么要添加 Jquery?
      【解决方案7】:

      我相信我也遇到过同样的困惑。当我更改为时,我开始遇到问题:

      </system.web>
      <httpRuntime targetFramework="4.5"/>
      

      这给出了您上面描述的错误消息。

      添加:

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

      解决了这个问题,但是它会让你的验证控件/脚本抛出 Javascript 运行时错误。 如果您更改为:

      </system.web>
      <httpRuntime targetFramework="4.0"/>
      

      你应该没问题,但你必须确保你的代码的其余部分按预期运行。您可能还必须放弃一些仅在 4.5 及更高版本中可用的新功能。

      附注强烈建议您在实施此解决方案之前阅读以下内容。特别是,如果您使用异步功能:

      https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/

      2017 年 4 月更新: 经过一些实验和测试,我想出了一个可行的组合:

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

      与:

      jQuery 版本 1.11.3

      【讨论】:

        【解决方案8】:

        它有 3 个其他人告诉上层的解决方案... 但是当尝试 Application_Start 解决方案时,我的其他 jQuery 库,如 Pickup_Date_and_Time 不起作用...... 所以我测试了第二种方法,它得到了回答: 1-将目标框架设置为 Pre 4.5 2- 在您的页眉中使用“UnobtrusiveValidationMode="None"” =>

        <%@ Page Title="" Language="C#" 
            MasterPageFile="~/Master/MasteOfHotel.Master" 
            UnobtrusiveValidationMode="None" %>
        

        它适用于我并且不会破坏我的其他 jQuery 函数。

        【讨论】:

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