2012-11-15 2 views
0

페이지의 공통 레이아웃 (상단 네비게이션 바, 왼쪽 네비게이션 바, 로고 등 ...)이있는 ASP.Net 4.0 웹 애플리케이션이 있습니다. Masterpages가 레이아웃 부분에 적합 할 것이고 이것이 내가 사용할 계획입니다. 나는 Masterpage와 일하는 데 익숙하지 않아, 많은 계획들이 여전히 시험되고있다. 그러나 페이지의 HTML을 렌더링하기 전에 수행해야하는 몇 가지 공통 기능이 내 페이지에 있어야합니다. 이 기능에는 사용자가 해당 페이지에 대한 액세스 권한이 있는지 여부가 확인됩니다. 또한 공통 기능은 페이지마다 조금씩 다릅니다. 일부 페이지는 필요하지 않습니다. 이 기능을 마스터 페이지에 포함 시키면 어떤 기능이 필요한지 알 수 있습니다. 그러나 페이지 결과가 페이지 렌더링에 영향을주기 때문에 콘텐츠 페이지 page_load가 실행되기 전에 삽입해야합니다. 기능을 매개 변수화하기 위해 콘텐츠 페이지의 정보가 필요하다는 것을 알고이 기능을 어디에 넣어야하는지 모범 사례가 있습니까? 이것은 Masterpage의 OnInit()에있는 것이 이상적입니다. 왜냐하면 이것이 전에 실행되기 때문입니다. 그러나 나는이 시점에서 내용 페이지에서 필요한 정보를 검색 할 수 있다고 생각하지 않습니다.각 웹 페이지의 기능을 중앙 집중화합니다.

덕분에 당신은 당신의 자신의 HttpModule의를 작성 시도 할 수 많은 지하드

+1

비즈니스 로직을위한 Masterpage (레이아웃 용)를 사용하는 대신 모든 페이지가 공통 기본 클래스에서 상속되도록하는 것이 좋습니다. –

답변

0

은 MasterPage이 기능에 대한 적절한 장소가 아니다. 이를위한 가장 좋은 장소는 특수 기능이 파생 된 페이지에있는 사용자 정의 기본 페이지 클래스에 있어야합니다. 이렇게하면 사용자 지정 클래스를 상속하고 필요한 기능을 페이지 단위로 호출 할 수 있습니다. 이 사이트에서 개별 페이지를 만들 때

public class MyCustomPage : System.Web.UI.Page 
{ 
    public bool IsAuthorized(string someCriteria) 
    { 
     // run special check 
    } 
} 

그런 다음, 당신은 단순히 자신의 클래스에 System.Web.UI.Page로부터 상속을 전환합니다.

public class MyNewWebPage : MyNameSpace.MyCustomPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsAuthorized("myCriteria")) 
      Response.Redirect("SomewhereElse.aspx"); 
    } 
} 
0

모든 페이지가 대신 비즈니스 로직 (레이아웃에 주로)를 Masterpage를 사용하는 공통 기본 클래스에서 상속하는 것이 좋은 것입니다. MasterPage의 Init에서

:

protected void Page_Init(Object sender, EventArgs e) 
{ 
    var page = HttpContext.Current.Handler as Page; 
    if (page is INeedsAuthentication) 
     checkAuthentication(); 
    else if (page is WebForm1) 
     specialCondition(); 
    else 
     commonCondition(); // for all pages, maybe do simply nothing here 
} 
당신은 여전히이 MasterPage에서 수행하려는 경우

그러나, 당신이 필요로하는 모든 페이지를 구현하는 인터페이스 INeedsAuthentication를 인증하기 위해 사용하는이 방법을 사용할 수 있습니다

관련 문제