WebForms UnobtrusiveValidationMode需要一个ScriptResourceMapping用于' jquery'。请添加名为jquery的ScriptResourceMapping(区分大小写)

时间:2013-05-21 01:44:45

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

我正在使用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>

9 个答案:

答案 0 :(得分:541)

您需要web.config键才能启用4.5之前的验证模式。

ValidationSettings:UnobtrusiveValidationMode 的更多信息:

  

指定ASP.NET全局启用内置验证程序控件的方式   使用不显眼的JavaScript进行客户端验证逻辑。

     

输入:UnobtrusiveValidationMode

     

默认值:无

     

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

     

示例:

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

答案 1 :(得分:165)

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

答案 2 :(得分:88)

至少有三种方法可以禁止使用不显眼的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
  4. 要基于每页禁用功能,我更喜欢使用page指令设置Page.UnobtrusiveValidationMode属性:

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

答案 3 :(得分:44)

默认情况下,在新版本的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);
        }
    }
}

答案 4 :(得分:10)

我相信我遇到了同样的困境。当我改为:

时,我开始遇到问题
</system.web>
<httpRuntime targetFramework="4.5"/>

其中提供了您在上面描述的错误消息。

中加入:

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

解决问题,然后它会使您的验证控件/脚本抛出Javascript运行时错误。 如果您更改为:

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

你应该没问题,但是你必须确保你的代码的其余部分符合要求。您可能还需要放弃仅在4.5之后可用的一些新功能。

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

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

答案 5 :(得分:9)

为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 :(得分:6)

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

<强>步骤1:

Code to be added in web page

第2步:

Code to be added in Web.config file

它将解决您的问题。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

它有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函数。