コントローラのモデルオブジェクトのキーを取得して、AddModelError
を追加できるようにしようとしています。同等のコードは、それがこのValidationMessageに接続するように、コントローラに追加するKey
名を取得するためにいただきました、私はコントローラで強く型付けされたモデルの "キー"を取得
@Html.ValidationMessageFor(model => model.Email)
を使用する私の見解では
。
コントローラのモデルオブジェクトのキーを取得して、AddModelError
を追加できるようにしようとしています。同等のコードは、それがこのValidationMessageに接続するように、コントローラに追加するKey
名を取得するためにいただきました、私はコントローラで強く型付けされたモデルの "キー"を取得
@Html.ValidationMessageFor(model => model.Email)
を使用する私の見解では
。
ModelState.AddModelError("Email", "the email is invalid");
通常はコントローラで手動で行う必要はありませんが、バリデータを使用する必要があります。たとえば、このEmailプロパティをいくつかの検証データアノテーション属性で飾ることができます。もし私のようなものであれば、FluentValidation.NET =>このようにして、実際の検証ロジックに重点を置いてキーに関する質問をするべきではありません。
あなたはHtmlHelpersと同じ処理を行い拡張子を使用することができ、それは、ネストされた性質のために動作します:
に相当ModelState.AddModelError<TModel>(i => i.Person.Name, "test");
:
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("Person.Name", "test");
これは、Htmlと同じIDを生成します。 MVCソースでは、いくつかの余分なサニタイズを行いますが、通常の名前では問題ではありません。
これを使用してエラーが発生しました。式が構造体の場合、式はオブジェクトを返すため、Convert(property)のように見えます。その場合、式テキストは空の文字列に評価されます。関数をpublic static void AddModelError
キーは常に名前になりますか?私はこれが生成されたと思ったので、常にオブジェクト名であるとは限りませんでしたか? –
いつも同じです。 –
フィールド名と常に同じです。 ReSharperを使用してもフィールドの名前を変更すると、一致するものだけが一致するため、この文字列は更新されないため、慎重にしてください。幸いにも、私は、未知のキーを使用すると、あなたのページが例外をスローするような悪影響はないと考えています。これは 'null'を使うことと同じです。 –