6

だから私はそれに追加できるように、コントローラでモデルオブジェクトのキーを取得しようとしていますAddModelError

私の見解では、私は使用します

@Html.ValidationMessageFor(model => model.Email)

Keyコントローラーに追加する名前を取得して、この ValidationMessage にアタッチするための同等のコードは何ですか。

4

2 に答える 2

22

HtmlHelpers と同じことを行い、ネストされたプロパティに対して機能する拡張機能を使用できます。

public static class ModelStateExtensions
{
  public static void AddModelError<TModel>(this ModelStateDictionary dictionary, Expression<Func<TModel, object>> expression, string errorMessage)
  {
    dictionary.AddModelError(ExpressionHelper.GetExpressionText(expression), errorMessage);
  }
}

したがって、次のように使用できます。

ModelState.AddModelError<TModel>(i => i.Person.Name, "test");

に相当

ModelState.AddModelError("Person.Name", "test");

Html と同じ ID を生成します。MVC ソースでは、追加のサニタイズが行われますが、通常の名前であれば問題ありません。

于 2012-08-17T18:32:34.627 に答える
3
ModelState.AddModelError("Email", "the email is invalid");

ただし、通常、これはコントローラーで手動で行うべきことではなく、バリデーターを使用する必要があります。たとえば、この Email プロパティをいくつかの検証データ アノテーション属性で装飾することができます。または、私のようにFluentValidation.NETを使用する場合=> この方法では、キーについて自問するのではなく、実際の検証ロジックに集中する必要があります。

于 2012-08-17T17:42:22.533 に答える