读书人

WEB复合控件的属性有关问题

发布时间: 2011-12-13 21:22:18 作者: rapoo

WEB复合控件的属性问题
做一个复合控件,里面有几个超链接,我想通过一个属性来一次性改变URL
private ListItemCollection linkUrl = new ListItemCollection();
[Bindable(true)]
[Category( "Appearance ")]
[DefaultValue( " ")]
[Localizable(true)]
[Description( "链接指向的URL ")]
public ListItemCollection LinkUrl
{
get
{
return linkUrl;
}
set
{
linkUrl = value;

link1.Text = value[0].Text;
link1.Text = value[1].Text;
link1.Text = value[2].Text;
link1.Text = value[3].Text;
link1.Text = value[4].Text;
link1.Text = value[5].Text;

link1.NavigateUrl = value[0].Value;
link2.NavigateUrl = value[1].Value;
link3.NavigateUrl = value[2].Value;
link4.NavigateUrl = value[3].Value;
link5.NavigateUrl = value[4].Value;
link6.NavigateUrl = value[5].Value;
}
}

但在网页上调用该控件后出现编译错误
无法在LinkUrl的字符串表示形式创建ListItemCollection对象

------解决方案--------------------


[DefaultValue( " ")] ??,去掉它试试

[解决办法]
复合控件定义复杂类型的属性:
ref:http://www.cnblogs.com/CHONGCHONG2008/archive/2007/05/23/757170.html

1.3 内部默认属性的实现
内部默认属性持久性通常用于持久保存某个控件的集合属性。如:
<asp:ListBox id= "listbox1 " Width= "100px " runat= "server ">
<asp:ListItem> Item 1 </asp:ListItem>
<asp:ListItem> Item 2 </asp:ListItem>
<asp:ListItem> Item 3 </asp:ListItem>
</asp:ListBox>

当某个控件有内部默认属性的时候,控件标签中的内容就只跟该书性对应。页面解析器不允许控件标签中有任何其他属性。内部默认属性的名称并不是在控件标签内部制定的。
为了实现内部默认属性的持久性,必须用ParseChildrenAttribute attribute的变种来标记控件,该attribute的第二个参数是内部默认属性的名称。


1 [
2 PersistChildren(true, "默认属性名 ")
3 ]
4 public class MyControl : WebControl{.}


而且为了在设计器中正确的持久保存某个内部默认属性,必须用PersistenceMode(PersistenceMode.InnerDefaultProperty)来标记该属性。如:


1 [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
2 public virtual ListItemCollection Items{}
[解决办法]
复合控件, 显示绑定的数据, 有好多方法, 比如Render, 不是你上面的那样.
属于开发自定义控件的范畴.


http://blog.csdn.net/chengking/archive/2007/05/15/1610497.aspx
http://blog.csdn.net/ChengKing/category/288694.aspx

读书人网 >C#

热点推荐