ステップ(コントローラー)を備えたウィザードのようなものを開発しており、継承し、追加のプロパティでそれらを拡張するなどを使用DerivedModel1
しDerivedModel2
てBaseModel
います。モデル - データのみ、ビジネス ロジックなし。_step1Service.GetRelated(model.id) などのコントローラー アクションでサービスによって実行されるすべてのロジック。
ここで、モデルを検証するだけでなく (この場合は がありますValidationAttribute
)、無効なデータを修正したいと思いますBaseModel
:
public class BaseModel
{
public DateTime StartDate {get;set;}
}
StartDate
今日よりも大きくなるはずです。ユーザーは無効な日付を選択でき、検証エラーの代わりに、アプリケーションはこの値を修正する必要があります (デフォルトにリセットしますか?)。
私の最初の試みでは、検証/修正のためのサービスを追加StartDate
し、各アクションで呼び出しました。
public ActionResult Index(DerivedModel1 model)
{
_svc.fixModel(model);
if(!ModelState.IsValid)
{
return View();
}
... do stuff with valid data
}
しかし、この行を各コントローラーとアクションに追加する必要があるため、それは好きではありません。次に、この修正をStartDate
セッターに追加します。見栄えは良くなりますが、これはすべてのロジックをコントローラーに配置する必要があるという一般的な MVC パラダイムを破っています (または、何か誤解しているのでしょうか?) この問題の可能な解決策について考えていました: ActionFilterAttribute、カスタム ModelBinder? しかし、これが正しい方法であり、機能するかどうかはわかりません。それについてどう思いますか?