メモ帳でモックアップした次のコードがあるとします。小さなエラーは許してください:)
//Default page
public ActionResult Index()
{
var musicViewModel
{
Albums = GetTopSellingAlbums(5),
Genres = GetTopGenres(5),
Artists = GetTopArtists(5)
};
return View(musicViewModel);
}
[HttpPost]
public ActionResult Index(MusicViewModel musicViewModel)
{
//For the example, pretend I have a class called musicStoreSubmission in my
//viewmodel which holds a few different fields the user fills out.
if(ModelState.IsValid)
{
//Do some actions based on the user submitting a form
}
//Else, refresh page with errors in Modelstate.
var musicViewModel
{
Albums = GetTopSellingAlbums(5),
Genres = GetTopGenres(5),
Artists = GetTopArtists(5)
};
return View(musicViewModel);
}
私の懸念は、ModelState が無効なエラーをポストバックするには、ビューモデルを再度生成して、それらのオブジェクトを使用するページ上の要素 (ジャンル、アーティストなど) を作成できるようにする必要があることです。問題は、コードの一部を ActionResult から ActionResult にコピーして貼り付ける必要があるため、コードがあまり DRY ではないように見えることです。
このようなコードの繰り返しを避けるより良い方法はありますか? 現時点では、viewmodel が必要とするデフォルト オブジェクトの生成を別のメソッドやコンストラクターに移動しただけですが、コントローラー全体に必要なすべてのオブジェクトを生成する必要があるため、少し面倒です。私ができることを望んでいたのは、2 番目のインデックス アクションを最初のインデックス アクションにポイントし、それを通常の方法として使用することでした。私はこれを行ういくつかの異なる方法を試しましたが、ActionResult を別の ActionResult に返すことはできません。
何かご意見は?