ASP.NET MVC3 ソリューションがあります。ユーザー名が既に存在するかどうかを確認するために、リモート検証を使用しています。
最初の段階で、次の検証属性を使用します。
[Required, Remote("UserNameAlreadyExists", "User", Error="Already exists!"]
public string UserName { get; set; }
実行時のトレースは次のとおりです。
次に、検証するために追加のフィールド (userID) を渡す必要があることに気付きました。
[Required, Remote("UserNameAlreadyExists", "User", AdditionalFields="UserID", Error="Already exists!"]
public string UserName { get; set; }
実行時のトレースは次のとおりです。
POST がもう 1 つあることがわかりますか?!
なんで?Tt は私の状況では問題です。これは私を夢中にさせます。
ご協力いただきありがとうございます。
アップデート
これが私のEdit.cshtmlのコードです
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.UserID)
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
...
<input type="submit" value="Submit">
}
ここにJavaScriptコードがあります
$('form', dialog).submit(function () {
// Do not submit if the form does
// not pass client side validation
if (!$(this).valid()) {
writeError("Validation failed!");
return false;
}
// On the line below: I retrieve the POST url + serialize all submitted data from my form
$.post($(this).attr('action'), $(this).serialize(), function (data, status) {
...
...
}).error(function (error, status, a, b) {
alert('Error!');
});
// Unbind form submitting
$('form', dialog).unbind();
return false;
});
コードを(段階的に)デバッグすると、いくつかの点に注意できます。
- フォームが送信され、jquery 関数によってインターセプトされます
- UserAlreadyExists がトリガーされます (なぜですか?)。この関数 (2 行目) には次のものがあります。この行に足を踏み入れると、突然編集の投稿アクションに足を踏み入れます。変!?いくつかのステップの後、関数 UserAlreadyExists に戻ります。それでもおかしい!?
問題が自分のコードにあるのか、それとも jquery.validate.min.js のバージョンが古くてバグがあるのか、それとも何か他のものなのかわかりません...
私は、AdditionalFields を使用しなくても問題ないことに気付きました!!
また、UserAlreadyExists ボロンタリーを (フィールドにフォーカスして) トリガーすると、送信 (投稿) 時に問題がないことにも気付きました!!
そのため、フォーム Edit が表示され、UserName フィールドがフォーカスされていない場合に問題が発生します。それから私は提出し、問題が到着しました
ありがとう。