首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2011-12-13 
WEB复合控件的属性问题做一个复合控件,里面有几个超链接,我想通过一个属性来一次性改变URLprivateListItem

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

热点排行