【问题标题】:Alternative to System.Web.UI.WebControls.TableCellSystem.Web.UI.WebControls.TableCell 的替代品
【发布时间】:2025-12-18 08:25:01
【问题描述】:

我有一个网站,它的代码几乎可以生成页面上的所有内容。主页包含一个通过代码构建的右侧菜单。它使用 System.Web.UI.WebControls.TableCell 类并为每个新项目创建一个 td。

这是一个sn-p的代码:

Public Sub BuildMainMenuStructure(ByVal Cell As TableCell, _
                                    ByVal Contents As DataTable, _
                                    ByVal ReadMode As Boolean, _
                                    ByVal CurrentPage As String, _
                                    ByVal RecSecurity As ApplicationRoleSecurity, _
                                    ByVal SourcePageRef As Integer, _
                                    ByVal IncludeMyIntranetPanel As Boolean)

    '-----------------------------------------------------------------
    'Div1 Contents
    '-----------------------------------------------------------------
    'Set up the contents in a div (panel) called pnlMainMenu1
    Dim mmContents As New MainMenuContents
    mmContents.ID = "pcaMainMenuContents"
    mmContents.SetControl(Contents, _
                          ReadMode, _
                          CurrentPage, _
                          RecSecurity, _
                          SourcePageRef)

    mintContentsCount = mmContents.Count

    Dim pnlMainMenu1 As New Panel
    With pnlMainMenu1
        .ID = "pcaMainMenuContentsPanel"
        'By default, this panel is visible:
        .Style.Add("visibility", "visible")
        .Controls.Add(mmContents)
    End With

在代码的另一个区域生成主页的不同部分:

   If IncludeMyIntranetPanel And ReadMode Then

        'Set up the contents in a div (panel) called pnlMainMenu2
        Dim mmMyIntranet As New MainMenuMyIntranet
        mmMyIntranet.ID = "pcaMainMenuMyIntranet"
        mmMyIntranet.SetControl(Contents, _
                              ReadMode, _
                              CurrentPage, _
                              RecSecurity, _
                              SourcePageRef)

        Dim pnlMainMenu2 As New Panel
        With pnlMainMenu2
            .ID = "pcaMainMenuMyIntranetPanel"
            'By default, this panel is visible:
            .Style.Add("visibility", "visible")
            .Controls.Add(mmMyIntranet)
        End With

        'Add it to the cell:
        Cell.Controls.Add(pnlMainMenu2)

    End If 'End If IncludeMyIntranetPanel

它通过 Cell.Controls.Add(pnlMainMenu2) 添加内容

我的任务是尝试重新设计主页。理想情况下,我想生成 DIV 类,以便轻松定位内容。

是否有我可以使用的 .net 类从数据库中获取数据并创建 div 类?

【问题讨论】:

    标签: .net css vb.net system.web.ui.webcontrols


    【解决方案1】:

    当然有替代方案,但决定使用哪一个在很大程度上取决于您要完成的工作以及您使用的 .NET 版本。

    Panel control 实际上会将 div 输出到页面,但如果您唯一的要求是“我想输出 div”,我不知道我会推荐它 - 我坚持使用 Panels我需要使用 ASP.NET 来控制它所包含的控件的可见性之类的东西。但是,对于现有网站,它可能是最接近 TableCell 控件的“直接”替代品。

    Literal control 存在于大多数 .NET 版本中,让您可以完全控制输出到屏幕的内容,但是,与 Panel 控件一样,它不是数据绑定控件;您需要在代码隐藏中获取您的信息,使用它将您喜欢的任何内容添加到文字的 .Text 中。这样做的缺点是,将我们想要的 HTML 从代码隐藏类型准确地转储到页面中,这违背了 ASP.NET 的方式。

    ListView control 实际上是一个数据绑定控件——你给它一个某种类型的数据库连接,它会遍历结果并显示一个列表。您可以完全控制该列表中输出的 HTML,因此您可以使用 div、lis 等,但使用逻辑来确定要显示的内容会比较棘手(尽管几乎不可能)。 (有一个较早的相关控件,the Repeater,使用起来更加笨拙,但存在于早期版本的 .NET 中)

    【讨论】:

    • 我在这里有点罗嗦,但我觉得我应该重申:Panel 控件和 Literal 控件都没有内置任何形式的数据库交互;你需要做你的数据库工作并通过代码隐藏添加输出。此外,与 TableCell 不同,Panel 控件实际上并不接受文本 - 是的,它输出 DIV,但您需要添加标签或 HyperLink 等控件才能实际输出文本。
    • 查看我正在使用的网站的问题是一切都是数据库/代码生成的。我认为开发人员不知道样式表实际上在哪里!有关于“重新设计”主页的讨论,但很多“东西”仍在继续,所以它不是用新设计为主页设计的情况。