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);
}
}
人们可以辩论将其置于“观点”中的纯度,但这似乎很有利。
覆盖这些方法有多危险/亵渎?什么时候有意义?
答案 0 :(得分:3)
您所描述的问题是,只有在控制器决定要呈现哪个视图时才会呈现视图。一开始可能看起来很令人惊讶,但是当你的OnPreInit
方法被调用时,控制器的所有逻辑都已经已经执行了。
正如@Ryan所说,正确放置它的地方是过滤器或基本控制器。