加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

有没有办法将内部控件放在ASP.NET自定义控件中?

发布时间:2020-12-15 20:00:58 所属栏目:asp.Net 来源:网络整理
导读:我想做一些类似(更新的例子): uc:Tabs Tab Name="A handy tab" Node Url="~/Default.aspx" / Node Url="~/Node2.aspx" / /Tab Tab Name="Another handy tab" Node Url="~/Neato.aspx" / Node Url="~/Node3.aspx" / Node Url="~/Node4.aspx" / /Tabuc:Tabs
我想做一些类似(更新的例子):
<uc:Tabs>
  <Tab Name="A handy tab">
    <Node Url="~/Default.aspx" />
    <Node Url="~/Node2.aspx" />
  </Tab>      
  <Tab Name="Another handy tab">
    <Node Url="~/Neato.aspx" />
    <Node Url="~/Node3.aspx" />
    <Node Url="~/Node4.aspx" />
  </Tab>
<uc:Tabs>

可能?任何教程或操作方法?我不知道甚至搜索什么或这是什么,所以没有找到任何东西到目前为止.内控内收藏东西…?

解决方法

使用 ParseChildrenAttribute和 PersistChildrenAttribute属性:
[ParseChildren(false)]
[PersistChildren(true)]
public class MyControl : UserControl { }

这将导致您在引用中放置任何控件:

<uc:MyControl runat="server">
  <asp:TextBox runat="server" />
<uc:MyControl>

附加到UserControl内容的控件集合的末尾.

但是,如果要设置控件集合,则应该使用服务器控件而不是用户控件.对于像这样的控件:

<foo:TabControl runat="server">
    <Tabs>
        <foo:Tab CssClass="myclass" Title="Hello World" />
    </Tabs>
</foo:TabControl>

您需要具有Tabs属性的Control类; Tabs属性应该是一个集合;它应该包含Tab类型的对象.我在这里创建了三个类:

[ParseChildren(true,"Tabs")]
public class TabControl: WebControl,INamingContainer
{
    private TabCollection _tabs;

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
    public TabCollection Tabs
    {
        get
        {
            if (_tabs == null)
            {
                _tabs = new TabCollection();
            }
            return _tabs;
        }
    }

    protected override void Render(HtmlTextWriter writer)
    {
        foreach (Tab tab in Tabs)
        {
            writer.WriteBeginTag("div");
            writer.WriteAttribute("class",tab.CssClass);
            writer.Write(HtmlTextWriter.TagRightChar);
            writer.Write("this is a tab called " + tab.Title);
            writer.WriteEndTag("div");
        }
    }
}

和tab类:

public class Tab
{
    public string CssClass { get; set; }
    public string Title { get; set; }
}

和标签集合:

public class TabCollection : Collection<Tab> { }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读