0

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

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

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

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

4

1 回答 1

0

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

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

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

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

<asp:Repeater runat="server">
    <HeaderTemplate><ul></HeaderTemplate>
    <ItemTemplate><li><a href='<% Eval("Link") %>'><%# Eval("PageName") %></a></li></ItemTemplate>
    <FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
于 2013-05-08T20:47:02.460 回答