318

I'm building a web application using Visual Studio 2012. I'm attempting to add word count into my textbox. However after adding the the javascript codes and the html codes. I receive the error as stated above.

Here is my javascript codeds

Code :

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, "");
}

Server codes in master page

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

ASPX codes, ( Html codes )

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

8 回答 8

608

您需要一个 web.config 密钥来启用 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>
于 2013-05-23T03:24:09.013 回答
178

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

于 2014-03-22T03:02:51.477 回答
96

至少有三种方法可以禁用不显眼的 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.UnobtrusiveValidationMode使用 page 指令设置属性:

<%@ Page Language="C#" UnobtrusiveValidationMode="None" %>
于 2014-08-27T22:04:32.137 回答
48

在新版本的 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 中开始 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);
        }
    }
}
于 2014-08-20T03:55:29.773 回答
13

在 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>
于 2015-06-04T20:42:09.397 回答
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

于 2015-12-03T23:47:44.880 回答
6

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

步骤1:

在网页中添加的代码

第2步 :

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

它将解决您的问题。

于 2015-09-16T13:04:17.663 回答
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 函数。

于 2019-12-28T04:54:58.610 回答