分项服务器控件 [英] Sub items for server control

查看:95
本文介绍了分项服务器控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在试图建立一个服务器控件。我一直试图让我的菜单项包含在尼思像这样其他的MenuItems

 < CC1:DynamicMenu ID =DynamicMenu1=服务器>
    <&的MenuItems GT;
        < CC1:菜单项文本=URL =>
            < CC1:菜单项文本=URL =>
                < CC1:菜单项文本=URL =>< / CC1:菜单项>
            < / CC1:菜单项>
            < CC1:菜单项文本=URL =>
                < CC1:菜单项文本=URL =>< / CC1:菜单项>
            < / CC1:菜单项>
        < / CC1:菜单项>
    < /&的MenuItems GT;
< / CC1:DynamicMenu>

但我的code只给了我这个

 < CC1:DynamicMenu ID =DynamicMenu1=服务器>
    <&的MenuItems GT;
        < CC1:菜单项文本=URL =>没有其他子元素的MenuItem< / CC1:菜单项>
    < /&的MenuItems GT;
< / CC1:DynamicMenu>

我曾与ParseChildren和PersistChildren从真或假swaping存在价值发挥各地,我已经江郎才尽
可能有人请帮助我解决我的问题,下面是我的code。

 使用系统;
使用System.Collections.Generic;
使用System.Linq的;
使用System.Text;
使用System.ComponentModel;
使用的System.Web;
使用System.Web.UI程序;
使用System.Web.UI.WebControls;
使用System.Security.Permissions;
System.Collections中使用;命名空间Gravity.Controls
{
[性AspNetHostingPermission(SecurityAction.Demand,级别= AspNetHostingPermissionLevel.Minimal)
[性AspNetHostingPermission(SecurityAction.InheritanceDemand,级别= AspNetHostingPermissionLevel.Minimal)
[ParseChildren(真),PersistChildren(真)
[ToolboxData(< {0}:DynamicMenu RUNAT = \\服务器\\>< / {0}:DynamicMenu>中)
公共类DynamicMenu:WebControl的
{
    公共DynamicMenu()
    {    }    清单<&菜单项GT; _menuItems;
    [PersistenceMode(PersistenceMode.InnerProperty)
    公开名单<&菜单项GT;的MenuItems
    {
        得到
        {
            如果(_menuItems == NULL)
                _menuItems =新的List<&菜单项GT;();
            返回_menuItems;
        }
    }
}[ParseChildren(假),PersistChildren(真)
公共类菜单项:作INamingContainer
{
    私人字符串_text;
    私人字符串_url;    公共菜单项(字符串文本,字符串URL)
    {    }
    公共菜单项()
        : 这个(, )
    {    }    公共字符串文本
    {
        得到
        {
            返回_text;
        }
        组
        {
            _text =价值;
        }
    }    公共字符串网址
    {
        得到
        {
            返回_url;
        }
        组
        {
            _url =价值;
        }
    }    私人列表<&菜单项GT; _subMenuItems;
    公开名单<&菜单项GT; SubMenuItems
    {
        得到
        {
            如果(_subMenuItems == NULL)
                _subMenuItems =新的List<&菜单项GT;();
            返回_subMenuItems;
        }
    }
}
}


解决方案

您需要在OnItemDataBound事件动态添加自定义的控件的实例本身。直到你的业务逻辑条件满足这将重新诅咒。(即:无儿无女,所以不添加其他控制)OnItemDataBound内

I've been trying to create a server control. I've been trying to get my MenuItem to contain other MenuItems under neath it like this

<cc1:DynamicMenu ID="DynamicMenu1" runat="server">
    <MenuItems>
        <cc1:MenuItem Text="" Url="">
            <cc1:MenuItem Text="" Url="">
                <cc1:MenuItem Text="" Url=""></cc1:MenuItem>
            </cc1:MenuItem>
            <cc1:MenuItem Text="" Url="">
                <cc1:MenuItem Text="" Url=""></cc1:MenuItem>
            </cc1:MenuItem>                
        </cc1:MenuItem>
    </MenuItems>
</cc1:DynamicMenu>

but my code only gives me this

<cc1:DynamicMenu ID="DynamicMenu1" runat="server">
    <MenuItems>
        <cc1:MenuItem Text="" Url="">No other child elements for MenuItem</cc1:MenuItem>
    </MenuItems>
</cc1:DynamicMenu>

I have played around with ParseChildren and PersistChildren swaping there values from true or false and I've run out of ideas could someone please help me with to resolve my problem below is my code.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Permissions;
using System.Collections;

namespace Gravity.Controls
{
[AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[ParseChildren(true), PersistChildren(true)]
[ToolboxData("<{0}:DynamicMenu runat=\"server\"></{0}:DynamicMenu>")]    
public class DynamicMenu : WebControl
{
    public DynamicMenu()
    {

    }

    List<MenuItem> _menuItems;
    [PersistenceMode(PersistenceMode.InnerProperty)]          
    public List<MenuItem> MenuItems
    {
        get
        {
            if(_menuItems == null)
                _menuItems = new List<MenuItem>();
            return _menuItems;
        }
    }
}

[ParseChildren(false), PersistChildren(true)]    
public class MenuItem: INamingContainer
{
    private string _text;
    private string _url;

    public MenuItem(string text, string url)
    {

    }
    public MenuItem()
        : this("", "")
    {

    }

    public string Text
    {
        get
        {
            return _text;
        }
        set
        {
            _text = value;
        }
    }

    public string Url
    {
        get
        {
            return _url;
        }
        set
        {
            _url = value;
        }
    }

    private List<MenuItem> _subMenuItems;       
    public List<MenuItem> SubMenuItems
    {
        get
        {
            if (_subMenuItems == null)
                _subMenuItems = new List<MenuItem>();
            return _subMenuItems;
        }
    }
}
}

解决方案

You need to dynamically add an instance of your custom control to itself in the OnItemDataBound event. This will re-curse until your business logic condition is met(ie:no children, so don't add another control) within the OnItemDataBound.

这篇关于分项服务器控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆