2012-05-09 2 views
2

동일한 도메인 개체를 편집하는 데 3 개의 뷰 모델이 있습니다. AutoMapper를 사용하여 도메인 객체의 뷰 모델에 매핑합니다.여러 viewmodels에 대해 동일한 actionresult 메서드를 사용합니까?

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 이 모든 viewmodels에 대해 동일한 방법을 사용하는 것이 가능 GET? ViewModels을 "ViewModelbase"에서 상속하게 할 수 있습니까? 없이 성공 :(사전에

많은 감사와 함께이 시도

편집 :! 이 내 방법은 지금 모습입니다 :

public ActionResult EditAdmin(ViewModels.Order.Admin_ViewModel model) {...} 

어떤 아이디어

UPDATE : 컴포지션을 사용하는 방법을 이해할 수 없었습니다 (몇 시간 동안 시도해 보았습니다). 그래서 이것을 정리하여 조금 깔끔하게 정리했습니다. 내 세 viewmodels :

[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) 
{ ... } 

나는이 솔루션에 대해 좋은 느낌하지 않습니다. 포인터 좀 주실 래요?

답변

1

IMHO - ViewModel은 간단하고 단순해야합니다. 상속을 도입하면 복잡해집니다.

구성을 사용하여 원하는 ViewModel을 구축하는 것이 좋습니다. 따라서 사용자가 특정 역할을 수행하는 경우 페이지가 게시 될 때 역할과 관련이없는 객체는 null이됩니다. 이를 사용하면 많은 POST 메소드 대신 사용할 수 있습니다.

업데이트 : ViewModel에서 실제로 상속을 받고 싶다면. 사용자 정의 모델 바인더가 기본 도구가 작동하지 않는 경우 해결책입니다.

+0

위의 업데이트를 참조하십시오. 감사! –

+0

@ JimH 세 가지 ViewModels를 공유해 주실 수 있으면 시도해 볼 수 있습니다. – Rajeesh

관련 문제