什么时候可以在ASP.NET MVC页面中插入页面生命周期?

时间:2010-07-30 04:08:06

标签: asp.net asp.net-mvc asp.net-mvc-2 override page-lifecycle

ASP.NET MVC似乎只运行在ASP.NET WebForms之上。 ASP.NET MVC中的System.Web.Mvc.ViewPage继承自System.Web.UI.Page,其中包括OnRender和朋友等页面生命周期方法。

我在网上看到了一些评论意见,你应该抵制在所有费用中超越这些方法的冲动!当然,这意味着我发现自己不愿意这样做。

下列的内容确实存在很多错误吗?

public class SslPage : ViewPage
{
    protected override void OnPreInit(EventArgs e)
    {
        // Make sure we are using SSL
        string url = HttpContext.Current.Request.Url.ToString();

        if(url.StartsWith("http:"))
        {
            HttpContext.Current.Response.Redirect("https" + url.Remove(0, 4),false);
        }

        // Back to our regularly scheduled programming...
        base.OnPreInit(e);
    }
}

人们可以辩论将其置于“观点”中的纯度,但这似乎很有利。

覆盖这些方法有多危险/亵渎?什么时候有意义?

1 个答案:

答案 0 :(得分:3)

您所描述的问题是,只有在控制器决定要呈现哪个视图时才会呈现视图。一开始可能看起来很令人惊讶,但是当你的OnPreInit方法被调用时,控制器的所有逻辑都已经已经执行了。

正如@Ryan所说,正确放置它的地方是过滤器或基本控制器。