【问题标题】:How can I dynamically access user control attributes?如何动态访问用户控件属性?
【发布时间】:2010-03-18 11:57:11
【问题描述】:

我正在尝试创建一个“用户控件菜单”,其中指向页面用户控件的链接放置在页面顶部。这将允许我在一个页面上放置几个用户控件,并允许用户跳转到页面的该部分而无需滚动太多。为了做到这一点,我将每个用户控件放在一个文件夹(用户控件)中,并给每个控件一个描述属性(<%@ Control Language="C#" Description = "Vehicles" .... %>)。

我的问题是如何动态访问此描述?我想将此描述用作菜单中的链接。到目前为止,我的页面上有一个 foreach,它在 ControlCollection 中查找 ASP.usercontrols 类型的控件。如果是,我会假设我可以访问它的属性并获取该描述属性。我怎样才能做到这一点? (我也愿意以更好的方式来实现我的“用户控制菜单”,但也许这是另一个问题。)我应该使用((System.Web.UI.UserControl)mydynamiccontrol).Attributes.Keys吗?

【问题讨论】:

    标签: asp.net collections icollection dynamic-usercontrols


    【解决方案1】:

    您可以遍历集合并执行 switch 或一些 if 语句

    我建议您为所有用户控件提供一个接口或抽象基类:

    public abstract class MyBaseClass : UserControl
    {
      public abstract string MyDescription {get;}
    }
    
    public MyUserControlA : MyBaseClass
    {
      public string MyDescription {get {return "my description";}}
    }
    
    public MyUserControlB : MyBaseClass
    {
      public string MyDescription {get {return "my other description";}}
    }
    

    然后你可以像你一样循环它们:

    foreach ...
    if (mydynamiccontrol is MyBaseClass)
    {
        Response.Write(((MyBaseClass)mydynamiccontrol).MyDescription);
    }
    

    希望对你有帮助

    【讨论】:

    • 我认为你的观点很好。我可能比我应该做的更难。我仍然很好奇如何访问用户控件中的描述属性。如果我尝试遍历属性集合,我只会得到一个空集合。
    猜你喜欢
    • 2012-02-02
    • 2010-09-29
    • 2012-01-10
    • 1970-01-01
    • 2021-04-04
    • 2017-05-17
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多