2010-02-18 120 views
1

在我的ASP.Net网站中,我有以下代码,我可以在整个网站上使用。
如何在ASP.Net MVC2中执行相同的操作?什么是MVC中的basepage相当于

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滤波器的替代方法是使主题属性延迟加载,使得其自身初始化(可能是从会话,或路由数据,或其他)在第一次使用。我发现这种方法更容易理解,因为从属性定义中可以清楚地看到值来自何处,并且在测试过程中像使用过滤器一样容易地截取值。 –

相关问题