【问题标题】:implementing mostly repeating content in ASP.NET WebForms' controls在 ASP.NET WebForms 的控件中实现大部分重复的内容
【发布时间】:2013-05-08 20:31:01
【问题描述】:

最初的问题是如何制作最可维护的代码,因为我需要一个在大多数 WebForms 中非常相似但不相同的菜单栏。

乍一看,我以为我想在自定义用户控件中制作一个占位符,该控件放置在母版页中,然后访问占位符,将独特的内容放入 WebForm 中,一切都很愉快且可维护。在阅读了表格并通过反复试验后,我意识到我尝试过的每个解决方案都存在一些问题:

  1. 将占位符控件放在用户控件中会使占位符及其每个内容难以在 Web 表单中访问(依赖于 FindControl("ID") 的嵌套实例),事件很难冒泡(我假设我当在引用它的代码中创建控件时必须执行此操作)或绑定(尽管引用:http://msdn.microsoft.com/en-us/library/t4z863dh(vs.71).aspx),但如果我想移动/重命名控件,代码很难维护。
  2. 嵌套控件会产生同样的问题,因为我想使用一个控件 - 在许多页面上进行小的修改。如果我嵌套,那么我仍然必须具有彼此的交叉控制知识,这在 ASP.NET 中是困难的。无论如何,如果我嵌套了用户控件,那么我还需要每个 WebForm 一个唯一的用户控件吗?
  3. 将代码复制并粘贴到每个 WebForm 很简单,但也很重复且容易出错。
  4. 显然,我什至不应该尝试继承用户控件来创建独特的孩子:How (if at all) can you make an ASP.NET UserControl inherit from another UserControl?

我是 ASP.NET 的新手。在这种情况下,我应该使用一些通用策略来制作良好的可维护代码吗?

【问题讨论】:

  • 您是否尝试过将内部控件公开为其容器的属性?这样更容易访问它们,无需通过 ID 获取。此外,继承与框架中的任何其他类一样。
  • 为什么不使用站点地图样式的解决方案?将您的菜单放入您将解析的 XML 文件中(只需在每一页中引用正确的菜单)。您甚至可以为常用菜单项创建一个“主”XML 文件(用于合并,例如与 XSLT)。

标签: asp.net vb.net coding-style


【解决方案1】:

您需要使用母版页,并将您的菜单放在那里...

http://msdn.microsoft.com/en-us/library/wtxbf3hh(v=vs.100).aspx

然后,对于数据驱动的菜单,请尝试使用其中一个模板控件(如中继器)来绑定您的数据。

例如,我有一个返回页面名称和链接的查询 - 我将它绑定到 Repeater 控件以生成我的菜单。

<asp:Repeater runat="server">
    <HeaderTemplate><ul></HeaderTemplate>
    <ItemTemplate><li><a href='<% Eval("Link") %>'><%# Eval("PageName") %></a></li></ItemTemplate>
    <FooterTemplate></ul></FooterTemplate>
</asp:Repeater>

【讨论】:

  • 使用母版页是我最终所做的。当我需要为每个 Web 表单添加独特的内容时,我感到很困惑。
猜你喜欢
  • 2011-01-21
  • 1970-01-01
  • 2017-05-13
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 2014-10-30
  • 2010-11-06
相关资源
最近更新 更多