MVC の DRY 原則に反する Create GET および POST アクションで同じコードを再利用しているため、MVC コードをより効率的にする方法について助けを求めています。
具体的には、EntityFramework を使用しており、ViewModel に次のコードを設定するコントローラーがあります。
public ActionResult Create()
{
var fileManagers = from x in db.UserProfiles
select x;
var estimators = from x in db.UserProfiles
select x;
var projectManagers = from x in db.UserProfiles
select x;
var jobStatuses = from x in db.JobStatuses
select x;
JobViewModel viewModel = new JobViewModel
{
Job = new Job(),
FileManagers = fileManagers.Select(x => new SelectListItem
{
Value = x.UserName,
Text = x.FirstName + " " + x.LastName
}).ToList(),
Estimators = estimators.Select(x => new SelectListItem
{
Value = x.UserName,
Text = x.FirstName + " " + x.LastName
}).ToList(),
ProjectManagers = projectManagers.Select(x => new SelectListItem
{
Value = x.UserName,
Text = x.FirstName + " " + x.LastName
}).ToList()
};
return View(viewModel);
}
私の POST 関数では、モデルの有効性を確認し、モデルが有効でない場合は同じコードを再度記述して ViewModel を再設定しています。これはhttp://の ASP.NET 音楽チュートリアルに示されています。 www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-5 .
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Job job, string action)
{
if (ModelState.IsValid)
{
db.Jobs.Add(job);
db.SaveChanges();
return RedirectToAction("Index");
}
var fileManagers = from x in db.UserProfiles
select x;
var estimators = from x in db.UserProfiles
select x;
var projectManagers = from x in db.UserProfiles
select x;
var jobStatuses = from x in db.JobStatuses
select x;
JobViewModel viewModel = new JobViewModel
{
Job = job,
FileManagers = fileManagers.Select(x => new SelectListItem
{
Value = x.UserName,
Text = x.FirstName + " " + x.LastName
}).ToList(),
Estimators = estimators.Select(x => new SelectListItem
{
Value = x.UserName,
Text = x.FirstName + " " + x.LastName
}).ToList(),
ProjectManagers = projectManagers.Select(x => new SelectListItem
{
Value = x.UserName,
Text = x.FirstName + " " + x.LastName
}).ToList()
};
return View(viewModel);
}
誰かがこれを行うためのより良い方法を提案できますか? プロジェクトは非常に小さいため、別のORMレイヤーを追加しないことが望ましいです。