实现ASP.NET WebForms控件中的重复内容

时间:2013-05-08 20:31:02

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

最初的问题是如何制作最易维护的代码,因为我需要一个非常相似但在大多数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?
  5. 我是ASP.NET的新手。在这种情况下,是否应该使用一些通用策略来制作良好的可维护代码?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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