0

@Html.ValidationSummary()登録ページで使用しています。入力したユーザー名が既に使用されている場合、次のメッセージ HTML が表示されます。

<div class="validation-summary-errors" data-valmsg-summary="true">
   <ul>
      <li>User name already exists. Please enter a different user name.</li>
   </ul>

私が望むのは、このメッセージを数行の HTML で変更できるようにして、メッセージが上記とまったく同じである場合に、ログインへのリンクを表示する HTML を追加できるようにすることです。このようなもの:

<div class="validation-summary-errors" data-valmsg-summary="true">
   <ul>
      <li>User name already exists. Please enter a different user name or <a xxxx>Login</a></li>
  </ul>
</div>

私は次のようなことをしようとしました:

@{
   var errorHTML = @Html.ValidationSummary();
   if ( errorHTML.IndexOf("User name already exists") > 0  ) {
        errorHTML = errorHTML + "xx"
   }                    
}

しかし、私はすぐに、MvsHtmlString に IndexOf の定義が含まれていないという問題に遭遇しました。

ユーザー名が既に存在するという検証メッセージがあるかどうかを確認し、HTML を追加して画面に表示する方法を誰かが提案できますか?

4

3 に答える 3

0

検証エラーに対して表示されるエラーメッセージを制御する1つの方法は、ModelState.AddModelError()メソッドを使用することです。

ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name or a xxxx");

@When Html.ValidationSummary()が実行されると、上記のメッセージが表示されます。

ただし、現在のメッセージが要約にどのように含まれているか、およびそれを制御できるかどうかはわかりません。言い換えれば、そのメッセージはどこから来ているのでしょうか?

于 2013-01-15T12:21:36.350 に答える
0

探しているものと一致するエントリについてModelStateを検査するアクションフィルタを記述し、それを変更するか削除することができます。次に、必要なアクションのみをフィルターで装飾できます。

[RemoveModelStateEntry(MatchOn = "Username already exists.")]
public ActionResult Index()
{
    return View();
}

アクションが実行され、提示される前に、モデルの状態を確認できます。

public class RemoveModelStateEntryAttribute : IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        // check filterContext.Controller.ViewData.ModelState here
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // nothing to do here
    }
}
于 2013-01-15T16:56:43.860 に答える
0

カスタム検証の概要を書くことができます。次に、使用Html.ValidationSummary()して MvcHtmlString を取得し、メッセージを変更します。カスタム ValidationSummary テンプレート Asp.net MVC 3 ASP.NET MVC で ValidationSummary HTML ヘルパーを拡張する方法?

于 2013-01-15T12:30:14.567 に答える