2010-07-27 2 views
0

현재 jQuery 포틀릿/정렬 가능/draggable을 사용하는 포털에서 콘텐츠 관리 시스템을 모두 포함하고 있습니다 (모두 ASP.NET MVC에 있음). 2. 관리자 만 현재 사이트의 레이아웃/컨텐트를 변경할 수 있습니다.ASP.NET MVC 포털/CMS - 컨트롤러 및 위젯 디자인?

각보기는 컨트롤러 및 동작을 기반으로 한 기본 컨트롤러의 개인 설정을 가져옵니다. 그런 다음보기는 위젯을 반복하고 각 위젯에 대한 renderaction을 호출합니다.

현재 각보기에서 페이지를 편집 모드로 설정하기 위해 View + "Edit"작업이 있습니다. 코드를 복제 할 때 더 좋은 방법이 있어야하지만, 내 인생에서 볼 수는 없습니다!

각보기를 편집 할 수있는 동작을 어떻게 구현합니까?

public ActionResult Legal() 
{ 
    PageModel model = GetPageSetting(); 
    return View("Portal", model.PageSetting.Master.Path, model); 
} 

[HttpPost] 
[Authorize(Roles = "Administrator")] 
public ActionResult LegalEdit(EditorModel e) 
{ 
    PageModel model = GetPageSetting("Legal", "Home", true); 
    return View("Portal", model.PageSetting.Master.Path, model); 
} 

가 //이 코드를 보지 않고 기본 컨트롤러

protected PageModel GetPageSetting(string action, string controller, bool isEditing) 
{ 
    PersonalizationProcess personalizationProcess = new PersonalizationProcess(); 

    string path = string.Format("~/{0}/{1}", controller, action); 
    string userName; 
    bool isAuthenticated; 

    if (User == null) 
    { 
     userName = "TestUser"; 
     isAuthenticated = false; 
    } 
    else 
    { 
     userName = User.Identity.Name; 
     isAuthenticated = User.Identity.IsAuthenticated; 
    } 

    PageSetting setting = personalizationProcess.GetPageSetting(userName, isAuthenticated, path); 
    PageModel model = new PageModel(); 
    model.Act = action; 
    model.Con = controller; 
    model.IsEditing = isEditing; 
    model.PageSetting = setting; 
    return model; 

답변

0

에, 당신은 코드 중복을 방지하는 방법에 대한 조언을 제공하기 어렵다. 그러나 일반적으로 "Extract Method/Extract Class"를 사용하여 더 이상 추출 할 수 없을 때까지 ...) ... 또한 MVC infrascructure를 사용하여 반복 코드의 일부를 수행 할 수 있습니다. ModelBinders 및 ActionFilters.

어쩌면 당신은 내가 포털 페이지의 하나 개의보기에 대한 코드를 추가 한 더 나은 방향

+0

에서 당신을 가리 키도록보기/편집 작업 '코드의 일부를 게시 할 수 있습니다. 사이트도 SEO가되어야하므로 위젯을 렌더링하고 아약스 콜백을 만들 수는 없습니다. –