메인 페이지가있는 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에서 페이지 제목과 다른 태그를 전달할 수 있습니다. 누군가가 더 나은 접근 방식을 제안한다면 많은 것을 인정합니다.
카일, 맞습니다. PostRepository를베이스 컨트롤러로 옮길 것입니다. 내 목표는 기본 컨트롤러에서 CRUID 작업의 표준 구현을 가지고 있지만, 나는 그것을 오버라이드하고 싶지 않고 파생 클래스 (SEOController)에서 추가 액션/뷰를 추가하기 만하면됩니다. –
방금 별도의 응용 프로그램 (새 테스트 ASP.NET MVC4 프로젝트)을 사용하여 모든 작업이 예상대로 진행되었지만 기본 컨트롤러에서 SEOController를 상속 받았으며 아무런 동작도 정의하지 않고 인덱스보기를 아무 문제없이 열었습니다. 그래서 내가 어떻게 든 작동하도록 AttributeRouting을 다룰 필요가있는 것처럼 lloks. 내 기본 컨트롤러에는 [RouteArea ("SEO", Subdomain = "seo")]와 같은 데이터 주석이 없습니다.이 클래스는 파생 클래스로 지정되어 있지만 기본 컨트롤러의 내 액션에는 [GET ("{{ } ")] 문제가있을 수 있습니다. –