2013-10-24 1 views
1

메인 페이지가있는 ASP.NET MVC 4 프로젝트가있어서 방문자는 하위 주제를 선택해야합니다. 그래서 구조는 다음과 같습니다 내가 하위 도메인에 라우팅 처리 할 AttributeRouting.net nuget 패키지를 사용하고ASP.NET MVC 용 BaseController 만들기

sypalo.com 
photo.sypalo.com 
seo.sypalo.com 
... and so on 

. 그래서 각 컨트롤러는 별도의 지역에 위치하며,이 데이터 주석 (여기서는 SEOController) 다음 : 나는 중복 된 코드의 양을 감소하기 위해 저장소를 구현하고있어

[RouteArea("SEO", Subdomain = "seo")] 
public class SEOController : Controller 
{ 
    private IPostRepository PostRepository; 

    public SEOController() 
    { this.PostRepository = new PostRepository(new BlogEntities()); } 

    public SEOController(IPostRepository PostRepository) 
    { this.PostRepository = PostRepository; } 

    [GET("{page?}")] 
    public ActionResult Index(int? page) 
    { return View(PostRepository.GetPosts("SEO", page ?? 1)); } 

    [GET("{year}/{month}/{link}")] 
    public ActionResult Details(int year, int month, string link) 
    { 
     Post post = PostRepository.GetPost("SEO", link); 
     if (post == null) return HttpNotFound(); 
     return View(post.Text.Replace(ViewRes.Main.ReadMore, "")); 
    } 
} 

,하지만 여전히 각 하위 도메인에 대한 CRUD 작업에 컨트롤러가 필요 . 모두 단일 테이블을 사용하여 하위 도메인이라고하는 별도의 필드가 있고 각 컨트롤러에서 하위 도메인 이름을 정적으로 전달합니다.

CRUD 기능을 사용하여 기본 컨트롤러 클래스를 만드는 방법을 찾고 있는데, 각 하위 도메인마다 고유 한 동작 /보기가 있으므로 파생 클래스에서 확장 할 수 있습니다. AFAIK View 나 SharedView의 위치를 ​​지정하여 여러 컨트롤러 (단일 색인/세부 정보/편집보기)에서 사용하는 단일보기를 가지며 다른 하위 도메인에 대해 동일한 코드를 유지하지 않도록 ViewBag에서 페이지 제목과 다른 태그를 전달할 수 있습니다. 누군가가 더 나은 접근 방식을 제안한다면 많은 것을 인정합니다.

답변

1

당신은 다른 모든 당신은 기본을 MyBaseController 방법을 사용할 수 있습니다, 당신은 당신이 당신의 SEOController에 구체적으로 필요한 것을 오버라이드 (override) 할이

public abstract class MyBaseController : Controller 
{ 
    public virtual void Create() 
    { 
     //standard implementation 
    } 
} 

public class SEOController : MyBaseController 
{ 
    public override void Create() 
    { 
     //specific to SEO 
    } 
} 

처럼 뭔가를 할 수 있습니다.

PostRepository을 다른 컨트롤러에서도 필요하면 기본 컨트롤러로 옮기고 싶을 것입니다. 그렇지만 그렇게하고 싶다면 구현에 대해 충분히 알지 못합니다.

+0

카일, 맞습니다. PostRepository를베이스 컨트롤러로 옮길 것입니다. 내 목표는 기본 컨트롤러에서 CRUID 작업의 표준 구현을 가지고 있지만, 나는 그것을 오버라이드하고 싶지 않고 파생 클래스 (SEOController)에서 추가 액션/뷰를 추가하기 만하면됩니다. –

+0

방금 ​​별도의 응용 프로그램 (새 테스트 ASP.NET MVC4 프로젝트)을 사용하여 모든 작업이 예상대로 진행되었지만 기본 컨트롤러에서 SEOController를 상속 받았으며 아무런 동작도 정의하지 않고 인덱스보기를 아무 문제없이 열었습니다. 그래서 내가 어떻게 든 작동하도록 AttributeRouting을 다룰 필요가있는 것처럼 lloks. 내 기본 컨트롤러에는 [RouteArea ("SEO", Subdomain = "seo")]와 같은 데이터 주석이 없습니다.이 클래스는 파생 클래스로 지정되어 있지만 기본 컨트롤러의 내 액션에는 [GET ("{{ } ")] 문제가있을 수 있습니다. –