我正在使用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>
答案 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进行客户端验证:
<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" %>
答案 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:强>
第2步:
它将解决您的问题。
答案 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函数。