同じドメイン オブジェクトを編集する 3 つのビューモデルがあります。AutoMapper を使用して、ドメイン オブジェクトからビューモデルにマップします。
得る
if (Roles.IsUserInRole("administrators"))
{
viewName = "EditAdmin";
editOrder = Mapper.Map<Order, ViewModels.Order.Admin_ViewModel>(order);
}
else if (Roles.IsUserInRole("administrators"))
{
viewName = "EditTechnician";
editOrder = Mapper.Map<Order, ViewModels.Order.Technician_ViewModel>(order);
}
else if (Roles.IsUserInRole("clients"))
{
viewName = "EditClient";
editOrder = Mapper.Map<Order, ViewModels.Order.Client_ViewModel>(order);
}
RedirectToRoute(viewName, editOrder);
POST すべてのビューモデルに同じ方法を使用することは可能ですか? おそらくViewModelに「ViewModelbase」から継承させることでしょうか?これを試してみましたが成功しませんでした:(
よろしくお願いします!
編集:これは私の方法が今のように見えるものです:
public ActionResult EditAdmin(ViewModels.Order.Admin_ViewModel model) {...}
何か案は?
更新: コンポジションの使用方法を理解できませんでした (数時間試しました)。だから私はこれを使って少しきれいにしました。これらは、私の 3 つのビューモデルのハンドラーです。
[HttpPost]
[Authorize(Roles = "administrators")]
public ActionResult EditAdmin(Admin_ViewModel model)
{
return SaveViewModel(model);
}
[HttpPost]
[Authorize(Roles = "technicians")]
public ActionResult EditTechnician(Technician_ViewModel model)
{
return SaveViewModel(model);
}
[HttpPost]
[Authorize(Roles = "clients")]
public ActionResult EditClient(Client_ViewModel model)
{
return SaveViewModel(model);
}
SaveViewModel は次のようになります。
protected ActionResult SaveViewModel(dynamic model)
{ ... }
私はこの解決策についてあまり気分が良くありません。いくつかの指針を教えてください。