首页 文章

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

提问于
浏览
277

我正在使用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>
  
<asp:Label ID="lblmsg" runat="server"></asp:Label>

<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" /> <asp:Button ID="btnClear" runat="server" Text="Clear" OnClick="btnClear_Click" /> </td> </tr>

8 回答

  • 85

    您需要web.config键才能启用pre 4.5验证模式 .

    有关 ValidationSettings:UnobtrusiveValidationMode 的更多信息:

    指定ASP.NET全局如何使内置验证器控件能够使用不显眼的JavaScript进行客户端验证逻辑 . 类型:UnobtrusiveValidationMode默认值:无说明:如果此键值设置为“无”[默认],则ASP.NET应用程序将使用4.5之前的行为(页面中的JavaScript内联)用于客户端验证逻辑 . 如果此键值设置为“WebForms”,则ASP.NET将使用HTML5数据属性和来自添加的脚本引用的后期绑定JavaScript作为客户端验证逻辑 . 示例:<appSettings>
    <add key =“ValidationSettings:UnobtrusiveValidationMode”value =“None”/>
    </的appSettings>

  • 1

    我没有禁用新功能,而是选择按照错误的说明操作 . 在我的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等集中控制脚本文件的传送 .

  • 9

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

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

    • System.Web.UI.Page.UnobtrusiveValidationMode 实例属性的值设置为 System.Web.UI.UnobtrusiveValidationMode.None

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

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

    默认情况下,在新版本的ASP.NET中启用不显眼的验证 . 不显眼的验证旨在通过替换内联JavaScript以使用使用jQuery的小型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"
            }
        );
    }
    

    C#和VB中的开始ASP.NET 4.5.1的第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);
            }
        }
    }
    
  • 523

    我相信我遇到了同样的困境 . 当我改为:我开始遇到问题:

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

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

    添加:

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

    解决问题, but then it makes your validation controls/scripts throw Javascript runtime errors. 如果您更改为:

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

    你应该没问题, but you’ll have to make sure the rest of your code does/ behaves as desired. You might also have to forgo some new features only available in 4.5 onward.

    P.S. It is highly recommended that you read the following before implementing this solution. Especially, if you use Async functionality:

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

    UPDATE April 2017: 经过一些实验和测试后,我想出了一个有效的组合:

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

    有:

    jQuery版本1.11.3

  • 42

    在global.asax上添加更多来自b_levitt的答案...:

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

    由于Control验证器而发生问题 . 只需将J Query引用添加到您的网页,如下所示,然后在web.config文件中添加验证设置以克服此问题 . 我也面临同样的问题,下面给出了我的问题的解决方案 .

    Step1:

    Code to be added in web page

    Step2 :

    Code to be added in Web.config file

    它会解决你的问题 .

  • 159

    如果您的代码或配置在查看其他答案后看起来正确,我也遇到了部署(开发阶段)网站的问题,并发现问题是Global.asax文件已重命名 . (几天前,当我搞乱了customErrors和Application_Error时)

相关问题