WebForms UnobtrusiveValidationMode を使用して ASP.NET WebForms アプリケーションのフォーム入力の検証をシームレスに行う
WebForms UnobtrusiveValidationMode が jquery の ScriptResourceMapping を必要とする理由
このエラーメッセージは、ASP.NET WebForms アプリケーションで Unobtrusive Validation モードを使用している場合に発生します。Unobtrusive Validation モードは、クライアント側の JavaScript を使用してフォーム入力の検証をシームレスに行う機能です。このモードを使用するには、jQuery ライブラリが正しくロードされている必要があります。
エラーの原因
このエラーが発生する理由は、ASP.NET が jQuery ライブラリをロードするために ScriptResourceMapping
という設定が必要としているからです。ScriptResourceMapping
は、ASP.NET が特定のライブラリをどこからロードするかを指示するために使用されます。
解決策
このエラーを解決するには、以下のいずれかの方法を実行する必要があります。
方法 1: ScriptResourceMapping を Web.config ファイルに追加する
- Web.config ファイルを開きます。
<configuration>
要素内に以下の行を追加します。
<system.web.script.resources>
<add assembly="System.Web.Extensions" type="System.Web.Extensions.ScriptResourceHandler" name="jQuery" path="~/Scripts/jquery-1.10.2.min.js" />
</system.web.script.resources>
方法 2: NuGet パッケージを使用して jQuery をインストールする
- Visual Studio で、プロジェクトに NuGet パッケージをインストールします。
jQuery
パッケージを検索してインストールします。- NuGet パッケージによってインストールされた jQuery ファイルへの参照を追加します。
方法 3: CDN から jQuery をロードする
<head>
タグ内に以下の行を追加します。
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
補足
- 上記の解決策は、ASP.NET 4.0 以降を使用している場合にのみ適用されます。
- jQuery のバージョンは、プロジェクトの要件に応じて変更する必要があります。
WebForms UnobtrusiveValidationMode を使用するサンプルコード
この例では、ASP.NET WebForms アプリケーションで Unobtrusive Validation モードを使用してフォーム入力の検証を行う方法を示します。
コード例
<configuration>
<system.web>
<pages enableUnobtrusiveValidation="true" />
</system.web>
<system.web.script.resources>
<add assembly="System.Web.Extensions" type="System.Web.Extensions.ScriptResourceHandler" name="jQuery" path="~/Scripts/jquery-1.10.2.min.js" />
</system.web.script.resources>
</configuration>
Default.aspx ファイル
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Unobtrusive Validation Example</title>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblName" runat="server" Text="Name:" />
<asp:TextBox ID="txtName" runat="server" Required="true" />
<asp:RequiredFieldValidator ID="rfvName" runat="server" ControlToValidate="txtName" ErrorMessage="Name is required." />
</div>
<div>
<asp:Label ID="lblEmail" runat="server" Text="Email:" />
<asp:TextBox ID="txtEmail" runat="server" Required="true" ValidationExpression="^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$" ErrorMessage="Invalid email address." />
<asp:RegularExpressionValidator ID="revEmail" runat="server" ControlToValidate="txtEmail" ErrorMessage="Invalid email address." />
</div>
<div>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />
</div>
</form>
</body>
</html>
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class Default : Page
{
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
// Submit form data
string name = txtName.Text;
string email = txtEmail.Text;
// Process form data
// ...
}
}
}
}
説明
- この例では、
pages
要素のenableUnobtrusiveValidation
属性をtrue
に設定して、Unobtrusive Validation モードを有効にします。 ScriptResourceMapping
要素を使用して、ASP.NET が jQuery ライブラリをどこからロードするかを指示します。jQuery
ライブラリ、jquery.validate.min.js
ライブラリ、およびjquery.validate.unobtrusive.min.js
ライブラリをスクリプト要素に追加します。- フォームには、名前と電子メールアドレスの入力フィールドが含まれています。
RequiredFieldValidator
コントロールを使用して、名前フィールドが必須であることを検証します。btnSubmit
ボタンをクリックすると、btnSubmit_Click
イベントハンドラーが呼び出されます。Page.IsValid
プロパティを使用して、フォーム入力の検証結果を確認します。- フォーム入力の検証が成功した場合は、フォームデータを処理します。
**この例は、WebForms UnobtrusiveValidationMode を使用する基本的な方法を示しています。詳細については、Microsoft のドキュメント [無効な URL を
WebForms UnobtrusiveValidationMode を使用するその他の方法
上記で紹介した方法は、WebForms UnobtrusiveValidationMode を使用する最も一般的な方法です。しかし、他にもいくつかの方法があります。
方法 1: ScriptManager コントロールを使用する
ScriptManager コントロールを使用して、jQuery ライブラリなどのクライアント側のスクリプトをロードできます。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Unobtrusive Validation Example</title>
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery-1.10.2.min.js" />
<asp:ScriptReference Path="~/Scripts/jquery.validate.min.js" />
<asp:ScriptReference Path="~/Scripts/jquery.validate.unobtrusive.min.js" />
</Scripts>
</asp:ScriptManager>
</head>
<body>
<form id="form1" runat="server">
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />
</form>
</body>
</html>
方法 2: WebResource.axd を使用する
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Unobtrusive Validation Example</title>
<script src="~/WebResource.axd?d=uI8700e8-130d-431a-8552-362518954131&t=637177010283000000" type="text/javascript"></script>
<script src="~/WebResource.axd?d=z412470d-a323-432d-b5d8-7478e6250323&t=637177010283000000" type="text/javascript"></script>
<script src="~/WebResource.axd?d=45973274-8c19-475a-8a6d-4f45f9734084&t=637177010283000000" type="text/javascript"></script>
</head>
<body>
<form id="form1" runat="server">
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />
</form>
</body>
</html>
方法 3: CDN を使用する
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Unobtrusive Validation Example</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.3/jquery.validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate-unobtrusive/1.12.0/jquery.validate.unobtrusive.min.js"></script>
</head>
html asp.net visual-studio