提问



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

最佳参考


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


有关验证设置:UnobtrusiveValidationMode 的更多信息:[22]



  指定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


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

其它参考2


至少有三种方法可以禁止使用不显眼的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" %>

其它参考3


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


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


</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/[24]


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


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


有:



  jQuery版本1.11.3


其它参考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


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


步骤1:


[25]


第2步:


[26]


它会解决你的问题。

其它参考7


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