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


305

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

Answers:


576

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

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

14
为什么这甚至是一个问题...为什么默认情况下不能将其禁用?谁会想要启用此功能?无论答案如何,我都添加了此键,但仍然出现错误...
Ortund 2013年

40
如果使用,似乎“ None” 不是默认值targetFramework="4.5"。我必须将此设置显式添加到我的web.config中才能正常工作。
Jesse Webb

18
提醒:web.Config文件中的<appSettings>父级应该是根元素,即<configuration>。
2013年

4
我安装了.Net 4.5.2,然后陷入了这个问题。我假设Windows 4.5.2更新更改了计算机配置。
Rez.Net 2015年

3
除非您试图赢得“最大页面尺寸”竞争,否则为什么要禁用不打扰的验证?
EKW

173

我没有禁用新功能,而是选择遵循错误的说明。在我的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博客文章,该文章强调了脚本资源映射的一些优点。我特别感兴趣的是基于“ debug = true”,EnableCDN等对脚本文件的传递进行集中控制。


@b_levitt我是.NET的新手,并通过了您提到的解决方案。确实提供了很多帮助,但只是好奇如何调用jQuery函数。例如,我有一个jQuery菜单,实现上述方法后,我正在使用<script type='text/javascript'> //<![CDATA[ $(document).ready(function () { $("#menu").menu(); }) //]] </script>。这是正确的方法吗?
Yashman Gupta 2014年

8
创建了要点:gist.github.com/monoman/ca42e54cdac25ef2284b通过不对jQueryVer值进行硬编码来进行改进;
Monoman 2014年

6
注意:我添加了这两个Nuget包,一切顺利。曾在/ bin文件夹复制到新文件到生产服务器.. nuget.org/packages/Microsoft.AspNet.Web.Optimization nuget.org/packages/AspNet.ScriptManager.jQuery
htm11h

1
取决于您的用例,哪一种是正确的。我们的应用程序没有任何验证(纯粹是内容交付),因此我们希望将其全部关闭。
萨曼莎·布兰纳姆

93

至少有三种方法可以禁止使用非侵入式JavaScript进行客户端验证:

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

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

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

7
每页设置好用。
布伦丹·汉尼曼

47

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

C#和VB中的Beginning 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);
        }
    }
}

RouteConfig来自哪里?
卢卡斯

@Lucas使用Visual Studio创建新项目时,它将RouteConfig.cs添加到App_Code文件夹中。参见编辑后的答案。
丹佛

12

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

12

我相信我也遇到过同样的难题。当我更改为以下内容时,我开始遇到问题:

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

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

添加:

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

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

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

您应该没问题,但是您必须确保其余的代码确实/符合要求。您可能还必须放弃一些仅在4.5及更高版本中可用的新功能。

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

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


6

发生此问题是由于控制验证器。只需按如下所示将J Query引用添加到您的网页,然后在Web.config文件中添加“验证设置”即可解决该问题。我也面临同样的问题,下面给出了解决我的问题的方法。

步骤1:

网页中要添加的代码

第2步 :

要在Web.config文件中添加的代码

它将解决您的问题。


将UnobtrusiveValidationMode设置为none后,为什么还要添加Jquery?
Ashin

0

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

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

它对我有用,并且不会破坏我的其他jQuery函数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.