基本的なクライアントとサーバーの検証に標準のモデル検証属性を使用する MVC 3 アプリケーションを構築しています。ただし、ヘッダーにあり、jQuery 検証プラグインを使用してクライアント検証を実行するフォームもあります。
目立たないライブラリをプロジェクトに追加すると、検証プラグインを使用するヘッダー フォームが実行に失敗し、投稿し続けます。目立たないライブラリが含まれていない場合、ヘッダーは正常に検証されますが、モデルの検証は停止します。
私が間違っていることは何ですか?
編集
基本的に、ヘッダーにログインフォームがあります。また、ログインできるログインページもあります。ログインページはモデルに関連付けられていますが、ヘッダーのフォームは関連付けられておらず、単なる html です。どちらのフォームも、jQuery .ajax を介して同じコントローラー/アクションを呼び出します。
目立たないライブラリを含めたので、呼び出されないように見える .ajax メソッドを使用する能力を失いました。
あなたが含めたコードが機能するようになりましたが、検証が完了した後も投稿したり、アクションを実行したりできません。
私のヘッダーフォームは次のとおりです。
<form id="frmHeaderLogin" action="">
<table id="LoginBox" title="Login">
<tr>
<td>UserName</td>
<td><input type="text" id="Username" name="Username" /></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" id="Password" name="Password" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Login" id="btnHeaderLogin" name="btnHeaderLogin" /></td>
</tr>
</table>
</form>
クライアント入力を検証し、JSON オブジェクトをデータ パラメーターとして作成した後、これをサーバーに送信する送信ボタンのクリック イベントがあります。サーバーからの応答も JSON オブジェクトです。このフォームは、すべてのページに配置されるため、レイアウト ファイルにあります。
メインのログイン ページ/ビューには、次のような単純なフォームがあります。
@using (Html.BeginForm("Login", "Account", FormMethod.Post, new { id = "MainLoginForm" }))
{
<div>
<fieldset>
<p style="color:Red;font-size:medium">@ViewData["Message"]</p>
<legend>Login</legend>
<div class="editor-label">
@Html.LabelFor(m => m.UserName, "EmailId")
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.Password, "Password")
</div>
<div class="editor-field">
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<p>
<input type="submit" id="btnMainLogin" value="Login" />
</p>
</fieldset>
</div>
}
これには、.ajax メソッドを起動し、上記のように JSON オブジェクトをサーバーに送信する jQuery クリック イベントもあります。どちらのインスタンスも JSON オブジェクトを返します。
この時点で、クライアントとサーバーの検証を利用できるようにするレイアウト ファイルにあるヘッダー ログインに同じモデルを使用できるかという疑問が生じる可能性があると思います。
以下は、検証に合格した後に使用していた submitHandler の例です (jquery.validate を使用)。
$("#formname").validate( {
// .....
// .....
submitHandler: function () {
var JSONData = new Object();
$(':text, :password', $("table[id$='LoginBox']")).each(function () {
JSONData[$(this).attr("id")] = $(this).val();
});
$.ajax({
type: "POST",
url: "/Controller/Action",
data: "{'Login': '" + JSON.stringify(JSONData) + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
var response = $.parseJSON(result);
alert("Header Login Success!");
},
error: function (xhr, status, error) {
alert(xhr.statusText + " - ReadyState:" + xhr.readyState + "\n" + "Status: " + xhr.status);
}
});
}
)};