什么时候可以干预ASP.NET MVC页面的生命周期?

什么时候可以干预ASP.NET MVC页面的生命周期?,asp.net,asp.net-mvc,asp.net-mvc-2,overriding,page-lifecycle,Asp.net,Asp.net Mvc,Asp.net Mvc 2,Overriding,Page Lifecycle,似乎ASP.NETMVC只是在ASP.NETWebForms之上运行。ASP.NET Mvc中的System.Web.Mvc.ViewPage继承自System.Web.UI.Page,其中包括OnRender和friends等页面生命周期方法 我在网上看到了一些评论,大意是你应该抵制不惜一切代价重写这些方法的冲动!。当然,这意味着我发现自己正在抵制这样做的冲动 像下面这样的事情真的有那么多错误吗 public class SslPage : ViewPage { protected o

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

我在网上看到了一些评论,大意是你应该抵制不惜一切代价重写这些方法的冲动!。当然,这意味着我发现自己正在抵制这样做的冲动

像下面这样的事情真的有那么多错误吗

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);
    }
}
有人可能会质疑将其置于“观点”的纯洁性,但这似乎是一种权宜之计


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

您描述的问题是,只有在控制器决定渲染哪个视图时,才会渲染视图。一开始可能会让人惊讶,但是当调用
OnPreInit
方法时,控制器的所有逻辑都已经执行了


正如@Ryan所说,正确的放置位置是在过滤器或基本控制器中。

您所描述的问题是,只有在控制器决定渲染哪个视图时,才会渲染视图。一开始可能会让人惊讶,但是当调用
OnPreInit
方法时,控制器的所有逻辑都已经执行了


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

MVC不在WebForms上运行。它们都在ASP.NET上运行,但在其他方面是不相关的。MVC中没有真正的页面生命周期。强制使用https的合适位置可能是过滤器或基本控制器。Ryan的评论在技术上是不正确的。WebForms内置于System.Web中。您可以使用任何ASP.NET MVC应用程序并添加runat='server',整个页面生命周期将以其特有的方式展现出来。MVC不会在WebForms上运行。它们都在ASP.NET上运行,但在其他方面是不相关的。MVC中没有真正的页面生命周期。强制使用https的合适位置可能是过滤器或基本控制器。Ryan的评论在技术上是不正确的。WebForms内置于System.Web中。你可以使用任何ASP.NET MVC应用程序并添加runat='server',整个页面生命周期都将展现在它的荣耀中。Dean,谢谢你澄清了我的愚蠢错误。我当时正在将MVC添加到一个现有的WebForms站点,我的思维显然处于请求=页面模式。当然,你是对的,一个视图(页面)只是在控制器的要求下创建的(对于我正在做的事情来说太晚了)。Dean,谢谢你澄清了我的愚蠢错误。我当时正在将MVC添加到一个现有的WebForms站点,我的思维显然处于请求=页面模式。当然,您是对的,视图(页面)只是在控制器的请求下创建的(对于我所做的来说太晚了)。