1

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 フィールドがフォーカスされていない場合に問題が発生します。それから私は提出し、問題が到着しました

ありがとう。

4

0 に答える 0