我们当前的Web门户是一个来自经典ASP代码库的端口.目前,我们项目中的所有页面扩展了一个Page名为的自定义类PortalPage.它处理登录/注销,为User当前经过身份验证的用户提供对公共对象的访问,并将标准页眉和页脚添加到我们的所有页面.
我们网站中的每个页面都是100%在代码隐藏中设计的.根本不使用ASPX页面.每个div,img和文本块都被分配为一个对象并从C#函数中添加,即使它是完全静态的内容(我们有相当数量).
页眉的示例:
HtmlGenericControl wrapperDiv = new HtmlGeneric("div");
HtmlAnchor bannerLink = new HtmlAnchor();
HtmlImage banner = new HtmlImage();
bannerLink.HRef = "index.aspx";
banner.Src = "mybanner.png";
banner.Alt = "My Site";
bannerLink.Controls.Add(banner);
wrapperDiv.Controls.Add(bannerLink);
this.Page.Controls.Add(wrapperDiv);
Run Code Online (Sandbox Code Playgroud)
更糟糕的是,所有Javascript都被添加到页面中,作为字符串连接的巨大混乱:
ClientScript.RegisterClientScriptBlock(this.GetType(), "javascript", @"
<script language='javascript'>
fullUrl = '" + ConfigurationManager.AppSettings["fullUrl"].ToString() + @"';
function showModule()
{
$('#" + this.userModule.ClientID + @"').css('display','block');
$('#" + this.groupModule.ClientID + @"').css('display','none');
$('#" + this.listsModule.ClientID + @"').css('display','none');
$('#" + this.labelsModule.ClientID + @"').css('display','none');
}
Run Code Online (Sandbox Code Playgroud)
目前,我的一位同事正在争辩说,在代码隐藏中分配每个对象比使用我看到的每个其他Web应用程序使用的ASPX w/Codebehind方法快数百倍.这违背了我的直觉,因为它实际上是添加runat="server"到页面上的每一段HTML. …