首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在asp.net中创建嵌套的ServerControl?

在asp.net中创建嵌套的ServerControl?
EN

Stack Overflow用户
提问于 2012-02-08 15:47:54
回答 2查看 552关注 0票数 0

我想创建一个如下所示的服务器控件:

代码语言:javascript
复制
<%@ Register Assembly="MdsAccordionMenu" Namespace="MdsAccordionMenu" TagPrefix="cc1" %>

<cc1:MdsAccordionMenu ID="MdsAccordionMenu1" runat="server">
    <MdsAccordionMenuItem Title="Some Title">
        <MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" />
        <MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" />
        <MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" />
        <MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" />
    </MdsAccordionMenuItem>
</cc1:MdsAccordionMenu> 

我写了以下c#代码,但它不能工作:

MdsAccordionMenu.cs:

代码语言:javascript
复制
namespace MdsAccordionMenu
{
    [ToolboxData("<{0}:MdsAccordionMenu runat=server></{0}:MdsAccordionMenu>")]
    [ParseChildren(true, "MdsAccordionMenuItems")]
    [DefaultProperty("MdsAccordionMenuItems")]
    [Serializable]
    public class MdsAccordionMenu : WebControl
    {
        [Description("سرعت نمایش انیمیشن")]
        [DefaultValue(500)]
        public int AnimationSpeed { get; set; }

        [Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)]
        public List<MdsAccordionMenuItem> MdsAccordionMenuItems { get; set; }
    }
}

MdsAccordionMenuItem.cs:

代码语言:javascript
复制
namespace MdsAccordionMenu
{
    //[TypeConverter(typeof(ExpandableObjectConverter))]
    [ParseChildren(true, "MdsAccordionItems")]
    [DefaultProperty("Title")]
    [Serializable]
    public class MdsAccordionMenuItem
    {
        [Description("تیتر منو")]
        [DefaultValue("Title")]
        [NotifyParentProperty(true)]
        public string Title { get; set; }

        [Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)]
        [NotifyParentProperty(true)]
        public List<MdsAccordionItem> MdsAccordionItems { get; set; }
    }
}

MdsAccordionItem .cs:

代码语言:javascript
复制
namespace MdsAccordionMenu
{
    [Serializable]
    public class MdsAccordionItem : INamingContainer
    {
        [NotifyParentProperty(true)]
        [Description("متن")]
        public string Text { get; set; }

        [NotifyParentProperty(true)]
        [Description("آدرس لینک منو")]
        public string Link { get; set; }

        [NotifyParentProperty(true)]
        [Description("آدرس آیکون")]
        public string ImageUrl { get; set; }
    }
}

我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-14 13:16:19

我可以解决这个问题

MdsAccordionMenu.cs

代码语言:javascript
复制
[ToolboxData("<{0}:MdsAccordionMenu runat=server></{0}:MdsAccordionMenu>")]
[ParseChildren(true, "MdsAccordionMenuItems")]
[DefaultProperty("MdsAccordionMenuItems")]
[PersistChildren(true)]
[TypeConverter(typeof(ExpandableObjectConverter))]
[Serializable]
public sealed class MdsAccordionMenu : WebControl, INamingContainer
{
    #region Properties

    public int AnimationSpeed { get; set; }

    public string InlineStyle { get; set; }

    [Bindable(true)]
    [Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public MdsAccordionMenuItemsClass MdsAccordionMenuItems
    {
        get { return _mdsAccordionMenuItem ?? new MdsAccordionMenuItemsClass(); }
        set { _mdsAccordionMenuItem = value; }
    }

    private MdsAccordionMenuItemsClass _mdsAccordionMenuItem;
}

MdsAccordionMenuItem.cs

代码语言:javascript
复制
[Serializable]
public class MdsAccordionMenuItemsClass : List<MdsAccordionMenuItem>
{

}

[ParseChildren(true, "MdsAccordionItems")]
[PersistChildren(true)]
[Serializable]
public class MdsAccordionMenuItem : INamingContainer
{
    public string Title { get; set; }

    private MdsAccordionItemsClass _mdsAccordionItems;

    [Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [Bindable(true)]
    public MdsAccordionItemsClass MdsAccordionItems
    {
        get { return _mdsAccordionItems ?? new MdsAccordionItemsClass(); }
        set { _mdsAccordionItems = value; }
    }
}

MdsAccordionItem.cs

代码语言:javascript
复制
[Serializable]
public class MdsAccordionItemsClass : List<MdsAccordionItem>
{

}

[Serializable]
[ParseChildren(true, "MdsAccordionSubMenuItems")]
[PersistChildren(true)]
public class MdsAccordionItem : INamingContainer
{
    public string Text { get; set; }

    private bool _visible = true;
    public bool Visible
    {
        get { return this._visible; } 
        set { this._visible = value; }
    }

    public string Link { get; set; }

    public string ImageUrl { get; set; }

    private MdsAccordionItemsClass _mdsAccordionSubMenuItems;

    [Bindable(true)]
    [Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public MdsAccordionItemsClass MdsAccordionSubMenuItems
    {
        get { return _mdsAccordionSubMenuItems ?? new MdsAccordionItemsClass(); }
        set { _mdsAccordionSubMenuItems = value; }
    }
}

现在,我可以使用以下代码在设计器模式下创建控件:

代码语言:javascript
复制
<cc1:MdsAccordionMenu ID="MdsAccordionMenu1" runat="server" EnableViewState="True">
    <MdsAccordionMenuItems>
        <cc1:MdsAccordionMenuItem Title="Submit">
            <MdsAccordionItems>
                <cc1:MdsAccordionItem Text="Item 01" Link="#" ImageUrl="~/style/icons/lightbulb.png" />
                <cc1:MdsAccordionItem Text="Item 02" Link="#" ImageUrl="~/style/myImages/question.png" />
                <cc1:MdsAccordionItem Text="Item 03" Link="#" ImageUrl="~/style/myImages/request-knowledge.png" />
                <cc1:MdsAccordionItem Text="Item 04" Link="#" ImageUrl="~/style/myImages/document.png" />
                <cc1:MdsAccordionItem Text="Item 05" Link="#" ImageUrl="~/style/myImages/book.png" />
                <cc1:MdsAccordionItem Text="Item 06" Link="#" ImageUrl="~/style/myImages/document1.png" />
            </MdsAccordionItems>
        </cc1:MdsAccordionMenuItem>
    </MdsAccordionMenuItems>
</cc1:MdsAccordionMenu>
票数 0
EN

Stack Overflow用户

发布于 2012-02-08 19:30:56

根据您的c#代码,标记应该如下所示...

代码语言:javascript
复制
<cc1:MdsAccordionMenu ID="MdsAccordionMenu1" runat="server">
            <MdsAccordionMenuItems>
                <cc1:MdsAccordionMenuItem Title="hello">
                    <MdsAccordionItems>
                        <cc1:MdsAccordionItem Text="Text"  Link="http://www.google.com" ImageUrl="~/Image.jpg" />
                    </MdsAccordionItems>
                </cc1:MdsAccordionMenuItem>
            </MdsAccordionMenuItems>
        </cc1:MdsAccordionMenu>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9189457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档