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>
4.5以前の検証モードを有効にするには、web.configキーが必要です。
詳細はValidationSettings:UnobtrusiveValidationModeをご覧ください。
ASP.NETが内蔵のバリデータコントロールをグローバルに有効にする方法を指定します。 ASP.NETがクライアント側の検証ロジックに邪魔にならないJavaScriptを使用するために、組み込みのバリデータコントロールをグローバルに有効にする方法を指定します。
Type:UnobtrusiveValidationMode タイプ: UnobtrusiveValidationMode デフォルト値なし > 備考:このキーの値が "None" [default] に設定されている場合、ASP.NET アプリケーションは、クライアントに対して 4.5以前の動作 (JavaScriptをページ内でインライン化)を使用します。 クライアント側の検証ロジックには、4.5以前の動作(JavaScriptをページ内にインライン化)が使用されます。このキーが設定されている場合 このキー値が "WebForms" に設定されている場合、ASP.NETはHTML5のデータ属性とレイトバウンドを使用します。 JavaScript from a added script referenceをクライアント側の検証ロジックに使用します。 ロジックを使用しています。
例
新しい機能を無効にするのではなく、エラーの指示に従うことにしました。私の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などに基づいて、スクリプトファイルの配信を集中管理することでした。
新しいバージョンのASP.NETでは、「控えめな検証」がデフォルトで有効になっています。 Unobtrusive Validationは、検証を実行するためのインライン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"
}
);
}
Beginning ASP.NET 4.5.1 in C# and VB」の399ページには、控えめな検証の利点についての議論と、それを構成するためのウォークスルーが掲載されています。
RouteConfigをお探しの方へ。 ビジュアルスタジオで新規プロジェクトを作成すると、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);
}
}
}