2011-10-04 4 views
2

간단히 말해서 어떤 종류의 데이터 저장소에서 데이터를 가져 와서 여러 클래스 중 하나를 반환하는 정적 클래스를 만들어 MVC 페이지 중 일부를 단순화하고 싶습니다. 일부 내부 플래그를 기반으로보기.MVC3 : 컨트롤러가 아닌 클래스에서 뷰 객체 반환

internal static class StaticPageContent 
{ 
    internal static ViewModels.Display GetPage(string Map = null, int? ID = null) {...} 
    internal static ActionResult ReturnView(ViewModels.CMS.Display vm) {...} 
} 

그런 다음 내 컨트롤러의 작업 중 하나에 내가 좋아하는 뭔가를 호출 할 수 있습니다

public ActionResult ActionName() 
{ 
    var vm = StaticPageContent.GetPage("/Home"); 
    return StaticPageContent.ReturnView(vm); 
} 

경우 여러 (공유)보기 중 하나를 반환 할 것 ReturnView() 메소드 :

internal static ActionResult ReturnView(ViewModels.CMS.Display vm) 
{ 
    if (vm.useLoremIpsum) 
     return View("LoremIpsum", vm); 
    else 
    { 
     if (vm.canEdit) 
      return View("ViewReadWrite", vm); 
     else 
      return View("ViewReadOnly", vm); 
    } 
} 

컨트롤러가 아닌 클래스에서보기 (...) 객체를 반환하는 올바른 방법은 무엇입니까? 보기 (...)가 Controller 클래스의 일부이므로 위의 내용은 컴파일되지 않습니다.


참고 : 는 나는이 작업과 같이하지만 내 시간에 대한 요구 다른 방향으로 날을 보냈을 가지고 생각합니다. 이 프로젝트를 다시 열어서 내가 한 일을보고 여기에 게시 할 수 있기를 희망합니다. 계속 지켜봐!

+0

내가 옳은 방향으로 당신을 가리 희망 무언가를 만들었습니다 http://stackoverflow.com/questions/3808076/using-the-razor-view-engine-in- a-different-way/3815216 # 3815216 – Buildstarted

답변

1

간단히 말해 올바른 방법은 정적 클래스에서 수행하지 않아야합니다. (IMO, 물론). 특히 데이터 저장소에서 데이터를 가져 오는 경우 - 정적이어서는 안됩니다.

IMO에서는 기본 컨트롤러에 보호 된 메서드를 만들거나 자식 작업을 사용하여 Html.Action을 사용하여 렌더링합니다.

+0

이 질문을 읽은 지 오래되었습니다. 그냥 호기심에 관한 질문 -이 상황에서 왜 정적 수업이 좋지 않다고 생각하니? 나는 그것이 싱글 톤이며 병 목이 될 수 있음을 이해합니다. 그 밖에있는 건 없니? 내 의도는 기본적으로 편집기 또는 읽기 전용 페이지에 데이터 소스의 데이터를 채우는 것입니다. 뷰 정의는 다양한 경로를 통해 사이트 전체에서 동일합니다. 나는 기본적으로 사이트 전체에서 사용할 수있는 단일 일반보기를 작성하는 쉬운 방법을 찾고 있습니다. :) –

+0

@KeithBarrows - 예, 싱글 톤이 하나의 이유입니다. 느슨한 커플 링 - 인터페이스 뒤에 정적 클래스를 구현할 수 없으므로 쉽게 스왑 아웃하거나 유닛을 테스트 할 수 없습니다. – RPM1984

+0

베이스 컨트롤러를 만들었습니다. "정적보기"는 필자가 실제 페이지 바인딩 마법을 쓸 때까지 기본적으로 필자입니다. 즉, 많은 "Ipsum Lorem"페이지가있는 웹 사이트를 만들고 각 페이지의 논리를 작성하여 내 고객이 진행 상황을 볼 수 있고 여전히 더미 사이트가있는 최종 사이트에 대한 느낌을 가질 수 있습니다. 데이터. –

관련 문제