ModelStateで何らかのカスタム検証が行われていたり、これまでにModelStateを操作していたときは、これまでのところプロパティ名を反映した魔法の文字列を使用しなければなりませんでした。確かに良い方法があるはずです。Mvc ModelState KeyForプロパティ
2つの送信ボタンがあるフォームがあるとします。
public class MyModel
{
[Required]
public string ValueOne { get; set; }
[Required]
public string ValueTwo { get; set; }
}
これは、常に両方のフィールドの妥当性を検証します。しかし、私は上記のモデルのためのフォームの表示とエディタに2つのボタンを追加したと言います。ボタン1はValueOneを必要とし、ボタン2は必要なValueTwoのみを必要とします。
Typically I would have custom validation code that checks which button was clicked and do something along the lines:
private void ValidateViewModel(MyModel viewModel)
{
foreach (var key in ModelState.Keys)
ModelState[key].Errors.Clear();
if (Request[{ButtonOneName}] != null && string.IsNullOrEmpty(viewModel.ValueOne))
ModelState.AddModelError("ValueOne", "Required");
else if (Request[{ButtonTwoName}] != null && string.IsNullOrEmpty(viewModel.ValueTwo))
ModelState.AddModelError("ValueTwo", "Required");
}
私の牛は魔法の文字列「ValueOne」と「ValueTwo」を持っています。また、エラーがクリアされる方法もあります。これらの鍵を生成する方法はありますか?私は車輪の再発明を開始する前に
ModelState.Get<MyModel>(m => m.ValueOne)
- この隠されたどこかのようなものが既にあります:
ModelState.KeyFor<MyModel>(m => m.ValueOne)
そして論理的な拡張:私のようなものを探していますか?
質問する前に、私は通常、送信ボタン名を表す定数文字列を含む静的クラスのSubmitActionsを定義します。ビューがレンダリングされたため、複数のフォームに分割することはできません。
ありがとうございます。
あなたがこの解決策を見つけますか? ModelState.KeyFor(m => m.ValueOne)は、まさに私がやっている何かのために必要なものでしょう... –
LDJ