2010-02-18 2 views
1

내 ASP.Net 웹 사이트에는 사이트 전체를 사용할 수있는 다음 코드가 있습니다.
ASP.Net MVC2에서 어떻게 동일한 작업을 수행합니까?MVC의 기본 페이지는 무엇입니까

public class BasePage : Page 
{ 
public BasePage() 
{ 
    this.PreInit += new EventHandler(BasePage_PreInit); 
} 

/// <summary>Every page executes this function before anything else.</summary> 
protected void BasePage_PreInit(object sender, EventArgs e) 
{ 
    // Apply Theme to page 
    Page.Theme = "Default"; 
} 
public bool IsSiteAdmin(string userName) 
{ 
    if (System.Web.Security.Roles.IsUserInRole(userName, "SiteAdmin1")) 
     return true; 
    return false; 
} 
} 

답변

7

테마가 MVC에 어떻게 맞는지 잘 모르겠지만 일반적으로 기본 컨트롤러 클래스를 만들어야합니다.

public class BaseController : Controller 

이 컨트롤러에서 모든 컨트롤러를 가져옵니다.

public class HomeController : BaseController 

그런 식으로 모든 컨트롤러에서 공통된 기능을 사용할 수 있습니다. 예 : IsSiteAdmin 메소드.

3

MVC에는 마스터 페이지와보기가 있습니다. 컨트롤러에서 페이지 대신 기본 논리를 사용하는 것처럼 들리는 것 같습니다. 원하는 경우 조건에 따라 뷰를 렌더링 할 때 컨트롤러에서 다른 마스터 페이지를 선택할 수 있습니다.

6

zaph0d가 말한 것처럼 Controller 클래스를 대체하려고합니다. 자신의 Controller 클래스를 만들 때 무시할 수있는 몇 가지 "이벤트"가 있습니다. 그 목록은 여기에있을 것입니다 :

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller_members.aspx

는 다음과 같은 작업을 수행 할 수 있습니다 것입니다. Page.Theme이 무엇인지 알지 못합니다. 처음 사용에서 (아마도 세션 또는 경로 데이터, 또는 어떤에서) 자신을 초기화하도록

public class BaseController : Controller 
{ 
    protected string Theme { get; set; } 

    protected override void OnActionExecuting(ActionExecutingContext context) 
    { 
     Theme = "Default"; 
    } 

    public bool IsSiteAdmin(string userName) 
    { 
     return System.Web.Security.Roles.IsUserInRole(userName, "SiteAdmin1"); 
    } 
} 
+1

OnActionExecuting 필터를 사용하는 대신, 테마 속성 지연 로딩하는 것이다. 이 접근법은 값이 나오는 속성 정의에서 매우 분명하기 때문에 이해하기 쉽습니다. 또한 필터와 마찬가지로 테스트 중에 값을 스텁링하는 것만 큼 쉽습니다. –

관련 문제