3

標準の MVC メンバーシップ認証のバリエーションを使用しています。

私のモデルが持っていると仮定すると:

    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

そして、ビューには次のものがあります。

<div class="form-field">
    @Html.EditorFor(m => m.UserName)
    @Html.ValidationMessageFor(m => m.UserName)
</div>

ユーザー名フィールドからタブを外すと、検証メッセージに「ユーザー名フィールドが必要です」と正しく表示されます。

私が必要としているのは、ユーザーが入力したユーザー名が送信の ActionResult で実行されるさらなる検証に失敗した場合、カスタム検証メッセージを表示したいということです。

たとえば、システムにすでにログインしているユーザー名をユーザーが入力した場合 (送信時にのみチェックされます)、ValidationMessage には「ユーザーはワークステーション xyz 経由で既にログインしています」のような内容が表示されるはずです。

Razor MVC 4 内で CustomValidationAttribute を使用する良い例が最適だと思います。それが機能する唯一の方法だと私は信じています。唯一のことは、これはクライアント側の検証用のようです。私の場合、サーバー側のみが必要です。

4

1 に答える 1

2

さらに少し調べてみると、間違ったツリーを吠えていることがわかりました。カスタムのサーバー側検証メッセージの場合は、次のようにします。

if (result.AlreadyLoggedIn)
{
  ModelState.AddModelError("UserName", String.Format("User already logged in via workstation {0}", result.WorkstationName));
}
于 2013-05-15T03:30:53.387 に答える