在代码隐藏中完全设计所有页面?

Jar*_*d S 5 c# asp.net webforms code-behind

我们当前的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.

他还说所有专业商店都以这种方式编写代码,从不使用ASPX页面.他说,所有教科书和示例代码都使用ASPX页面,因为新手编程人员更容易理解.这是真的吗,还是我们只是为了传统而以极其低效的方式写作?

为了让我们切换到编写Web窗体的"标准"方式,我需要提供一些来源来证明他是错的.

我的问题是,我从来没有听说过其他人在代码隐藏中编写所有内容.我见过的每个例子都使用ASPX页面作为用户界面,并使用代码隐藏逻辑,数据库调用等.

总而言之:
1)ASPX页面是否真的比100%代码隐藏慢得多?
2)专业店实际上是否使用100%代码隐藏?
3)如果ASPX w/codebehind是要走的路,有没有人有任何可以帮助支持我的可信链接?

SLa*_*aks 13

你的同事完全,可怕,错误.


Ode*_*ded 12

  1. 它们都被编译成程序集.在.aspx被应用程序启动时加载一次,解析一次.
  2. 不,如果他们有任何意义,那就不是了.
  3. 查看有关ASP.NET的网站上的每本书.他们使用.aspx.

测试此方法的一种方法是运行性能测试,其中两个.aspx页面完全相同.除了.aspx(解析和编译)可能的短启动延迟之外,我怀疑是否会检测到任何显着差异.

使用背后的所有代码是一种错过的方法:

  • 与了解HTML的设计师合作
  • 能够直观地检查标记
  • 能够轻松改变布局
  • 让经验丰富的asp.net开发人员与您合作......
  • 有一个理智的开发asp.net的方式
  • 伟大的工具和现有的集成


Bra*_*osh 6

我甚至不知道从哪里开始.

我不能谈论性能问题 - 但我已经研究了几十个和几十个WebForms应用程序,而且没有一个问题存在性能瓶颈与使用aspx页面有关的问题.

这听起来像是一场彻头彻尾的噩梦.

  1. 演示内容包含在aspx中.

  2. 事件处理程序进入代码隐藏

  3. 业务逻辑完全属于一个单独的类.

  4. Javascript是你的朋友,你可以使用单独的js文件来保持你的理智.