0

目標

jQuery Validation を使用してビューにカスタムエラーを表示します。

問題

すべてがうまくいっています。はい...すべて!私が必要としているのは、問題への光です。私はすでにGoogleとStackで検索しましたが、今まで成功していません.

よし、行こう: メールとパスワードで構成された私のログインフォームはうまく検証されている - メールが無効であるか、パスワードフィールドが空の場合、メッセージをスローする. しかし、必要なのは、電子メールとパスワードの組み合わせがデータベースに存在しない場合、つまりユーザーが存在しない場合にメッセージをスローすることです。

次のフラグメントを見てください。

[...]

[AcceptVerbs(HttpVerbs.Post)]
[ValidateAntiForgeryToken]
[AllowAnonymous]
public ActionResult Authenticate(User userModel)
{
    if (ModelState.IsValid)
    {
        if (userModel.IsValid(userModel.Email, userModel.Password))
        {
            FormsAuthentication.SetAuthCookie(userModel.Email, userModel.Remember);
            return RedirectToAction("Index");
        }
        else
        {
            ModelState.AddModelError(String.Empty, "Login data is incorrect!");
        }
    }
    return View(userModel);
}

[...]

次の行に注意してください。

ModelState.AddModelError(String.Empty, "Login data is incorrect!");

ビュー " " に表示したいのですが、Login data is incorrect!どうしたらよいかわかりません。

コード スポットライト

私は jQuery Validation Unobtrusive を使用しています。それだけです。それ以上のことはありません。スクリプトを呼び出すと、アプリケーションが続行されます。

ちなみに、必要に応じて、いくつかのマークアップに従ってください。

[...]
@using (Ajax.BeginForm("Authenticate", "Manager", 
           new AjaxOptions{ HttpMethod = "Post" })){
    <ul>
        <li>
            @Html.LabelFor(m => m.Email, "What's your email?")
            @Html.TextBoxFor(m => m.Email, "", new { placeholder = "Email" })
            @Html.ValidationMessageFor(m => m.Email)
        </li>
        <li>
            @Html.LabelFor(m => m.Password, "What's your password?")
            @Html.TextBoxFor(m => m.Password, "", new { placeholder = "Password" })
            @Html.ValidationMessageFor(m => m.Password)
        </li>
        <li>
            @Html.CheckBoxFor(m => m.Remember)
            Remember
        </li>
        <li>
            <button type="submit" class="btn btn-primary">Log In</button>
        </li>
    </ul>
}
[...]

覚えておく

jQuery Validation のスクリプトを呼び出すだけで、モデルのプロパティの上部に注釈としてマークした (単純な) 検証が魔法のように機能します。

質問の理解度を向上させるために、Userのモデルをスニーク ピークに従ってください。

[...]

[Required]
[EmailAddress]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email")]
public string Email { get; set; }

[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

[...]
4

1 に答える 1

0

ユーザーをチェックして bool (true|false) を返すメソッドがあると仮定すると、戻り値に基づいて、次のようなものを使用します。

 if (!_userService.GetUser("userName"))
  {
    ModelState.AddModelError("UserName", "Account not found");
    return View();
  }
于 2013-08-16T10:05:22.537 に答える