오랜만에 강좌 한번 써보겠습니다. 저번에는 Razor 웹 페이지 내에서 Razor 페이지의 기틀 클래스를 상속받는 방법에 대한 팁을 알려드렸습니다.

그렇다면 ASP.NET MVC 에 Razor 페이지의 상속 클래스는 뭥미?


간단합니다. 일단 보여지니까 View겠죠? 바로 ViewPage 입니다.

아니죠. WebViewPage 맞습니다.


ViewPage는 일반 ASPX 페이지에 상속받는 클래스입니다. 그래서 ASPX 로 뷰 페이지 꾸미신다면 ViewPage 상속시킨 클래스 만들면 되죠.

하지만 Razor는 다릅니다. 원래 다르잖아요. 어쨌든, Razor 의 뷰를 나타내는 클래스는 바로 WebViewPage 입니다.

이제 답이 나왔습니다. 별거 없죠? WebViewPage 상속만 하면 끝나죠.


하지만 조심해야 할거는! Razor View 에는 Model과 연계된 시스템이 있습니다.

@model 키워드 괜히 생긴거 아닙니다. 모델과 바로 연계되는 마소의 센스가 있어서 그런지 떠날 수는 없죠.

반드시 제네릭으로 클래스를 선언하세요. 물론 추상은 덤입니다.

Razor 페이지는 일반 Razor 페이지와 마찬가지로 추상 클래스에 상속받은 후 ExecutePage 메서드를 각 페이지마다 구현하는 구조이기 때문에 당연히 추상 클래스로 선언하셔야 합니다.

이렇게요.


코드
  1.     /// <summary>
  2.     /// 나만의 뷰 페이지
  3.     /// </summary>
  4.     /// <typeparam name="TMod">모델 타입</typeparam>
  5.     public abstract class MyViewPage<TMod> : WebViewPage<TMod>
  6.     {
  7.         /// <summary>
  8.         /// 심심하면 그냥 연결 문자열 불러오긔.
  9.         /// </summary>
  10.         public readonly string DefaultDB =
  11.             ConfigurationManager.ConnectionStrings["MyDB"] != null ?
  12.             ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString : null;
  13.     }


제가 좀 무섭게 설명했지만 실상 별건 아닙니다.ㅋ

하지만 비즈니스단에서 MVC 구성을 할때는 이런 것도 필요한 상황은 오는겁니다.


자. 어쨌든 나만의 뷰 페이지에 대한 클래스를 선언했으면, 써먹어야겠죠?

먼저 별도의 페이지마다 적용하고 싶다면 별거 없습니다. 맨 첫줄에 이거만 추가하면 됩니다.


  1. @inherits My.View.MyViewPage<dynamic>


모델 타입이 다르세요? 제네릭 타입만 바꿔주면 됩니다. 어자피 기본 타입은 dynamic 이니까 뭐.. 취향대로 바꾸시면 됩니다.


그렇다면 모든 뷰 페이지에 적용하고 싶다면? 어려울 건 없습니다.

MVC 프로젝트를 만들었다면 View 폴더 아래에 Web.config 파일이 있습니다. 그러면 razor를 찾으세요.


  1. <system.web.webPages.razor>
  2.         <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  3.         <pages pageBaseType="System.Web.Mvc.WebViewPage">


이 부분에서 page 태그의 pageBaseType 속성이 보이시죠? 그걸 자신이 만든 뷰 페이지 클래스로 지정하면 됩니다.

어때요. 참 쉽죠?





profile
20대 언제나 쿨한 개발(犬足)자.