【发布时间】:2011-01-13 02:34:05
【问题描述】:
我已经构建了一个名为 Menu 的简单控件:
namespace MyControls
{
public class MenuItem
{
public MenuItem()
{
Visible = true;
}
[Localizable(true)]
public string Text { get; set; }
[Localizable(false)]
public string Link { get; set; }
[DefaultValue(true)]
public bool Visible { get; set; }
}
public class MenuDesigner : System.Web.UI.Design.ControlDesigner
{
...
}
[ParseChildren(true, "Items")]
[PersistChildren(false)]
[Designer(typeof(MenuDesigner))]
public class Menu : Control
{
...
public Menu()
{
}
...
private List<MenuItem> _items = new List<MenuItem>();
[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<MenuItem> Items
{
get
{
return _items;
}
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
... // More Controls.
list = new BulletedList();
list.DisplayMode = BulletedListDisplayMode.HyperLink;
this.Controls.Add(list);
foreach (var mi in _items)
{
list.Items.Add(new ListItem(mi.Text, Page.Request.CreateUrl(mi.Link)));
}
}
}
}
我以这种方式在我的页面中使用它:
<my:Menu ID="menu" runat="server" Text="MenuTitle">
<my:MenuItem Text="text" Link="link1.aspx">
</my:MenuItem>
<my:MenuItem Text="text2" Link="link2.aspx">
</my:MenuItem>
</my:Menu>
这行得通。没问题。当我切换到设计器视图时,我会以 MenuDesigner 呈现它的方式看到控件。使用 CTRL-K 重新格式化,CTRL-D 有效。运行我的网页会以我期望的方式呈现给菜单。
但是:当我在 DesingView 中点击菜单项“工具”->“生成本地资源”时,我得到了这个结果:
<my:Menu ID="menu" runat="server" Text="MenuTitle"
meta:resourcekey="menuResource9">
<my:MenuItem Text="text" Link="link1.aspx">
</my:MenuItem>
<my:MenuItem Text="text2" Link="link2.aspx">
</my:MenuItem>
<Items>
<my:MenuItem Text="text" Link="link1.aspx" meta:resourcekey="MenuItemResource10"></my:MenuItem>
<my:MenuItem Text="text2" Link="link2.aspx" meta:resourcekey="MenuItemResource11"></my:MenuItem>
</Items>
</my:Menu>
哪些属性缺失/错误?我查看了 ListBox,它也解析子项,我感觉我的控件也在做同样的事情。
我发现的唯一区别:
- 我使用的是通用列表,ListBox 有它自己的 ListItems 集合类型
- 我的 MenuItem 没有 Editor、ControlBuilder 或 TypeConverter,ListBox 有。
这不是我愿意出售的控件,它只适合我。我不需要任何 Editor 或 Desinger,我正在手动编写 HTML/ASP.NET 标记。
我正在使用 Visual Studio 2008、.NET 3.5。
感谢任何提示、帮助或解决方案!
【问题讨论】:
标签: asp.net custom-controls designer