0

私はこのMVC3に慣れていないので、これを理解できませんでした。これが状況です-

フォームがあります。顧客が電子メール アドレスを入力すると、onkeyup は電子メール アドレスが DB のどこに既に存在するかを確認します。はいの場合、テキストボックスの横に「電子メールは既にデータベースに存在します」という検証エラーメッセージを表示し、顧客が新しい電子メールアドレスで試行するまでユーザーがフォームを送信できないようにしたいと考えています。モデルに設定した検証ルールの残りの部分。しかし、これは DB に対してチェックする必要があります。

問題は、jquery 検証をオーバーライドして、テキスト ボックスの横に特定の検証エラー メッセージを表示する方法がわからないことです。

誰でもこれについて私を助けてくれますか?

よろしくお願いします

4

2 に答える 2

1

[Remote]サーバーにAJAXリクエストを送信することで、この検証を実行できる属性を使用できます。アイデアは、検証のために呼び出されるコントローラーアクションを示すRemote属性でビューモデルのEmailプロパティを装飾することです。

[Remote("IsEmailAvailable", "Validation")]
public string Email { get; set; }

次に、この検証を実行するためのコントローラーアクションを記述します。

public ActionResult IsEmailAvailable(string email)
{
    if (CheckEmailAvailability(email))
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    return Json("Sorry, the specified email is already taken", JsonRequestBehavior.AllowGet); 
}

次に、ビュー内に対応するフィールドがあります。

<div>
    @Html.LabelFor(x => x.Email)
    @Html.EditorFor(x => x.Email)
    @Html.ValidationMessageFor(x => x.Email)
</div>

ユーザーが最後に電子メールが利用可能かどうかを確認してからフォームが送信されるまでの間に、フォームを送信するコントローラーアクション内で同じチェックを実行する必要があることに注意してください。電子メールはすでに他の誰かによって取られている可能性があります:

[HttpPost]
public ActionResult ProcessFormSubmit(MyViewModel model)
{
    // Warning this will not call the validation controller action specified
    // by the Remote attribute
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    // now make sure you check for the email
    if (!CheckEmailAvailability(email))
    {
        // the email is already taken
        return View(model);
    }

    // at this stage the model is valid => you could process it
    ...
}
于 2013-02-27T07:20:09.643 に答える
1

[Remote]を使用すると、アイテムを検証するためにアクセスする URL を簡単に指定できます。または 、カスタムロジックを記述できるカスタムデータ注釈を作成できます。

テキスト ボックスにコンテンツを入力すると、ajax を使用してリモート属性の検証が開始されますが、コンテンツを送信してModel.IsValid()メソッドを呼び出すと、カスタム属性の検証が開始されます。ハッピーコーディング

リモート属性の使用方法へのリンク

于 2013-02-27T07:22:48.840 に答える