我有一个复合控件(class
)通过get属性公开asp:Label
。 是否可以通过aspx代码设置Label的Text
属性?
我想做这样的事情:
<cfw:MyCompositeControl runat="server" Label.Text="Test" />
一种解决方案是将每个属性添加到复合类(如公共LabelText),但我想设置任何子控件的任何属性。因此,随着子控件的新功能变得可用,我希望能够在我的复合控件上使用它们。所以基本上我想设置暴露的子控件的任何属性。
答案 0 :(得分:1)
您可以使用内部属性来执行此操作:
[ParseChildren(ChildrenAsProperties = true)]
public partial class MyControl: UserControl
{
[PersistenceMode(PersistenceMode.InnerProperty)]
public TestClass TestLabel
{
get;set;
}
}
public class TestClass
{
public string Field1
{ get; set; }
public string Field2
{ get; set; }
}
标记:
<MyTag:MyControl runat="server">
<TestLabel Field1="a" Field2="b" />
</MyTag:MyControl>
我之前从未使用过简单的属性实际执行此操作 - 通常,您正在使用集合。在我自己玩这个例子的过程中,在标记窗口中,Visual Studio允许你在TestLabel
内创建<MyTag:MyControl>
的多个实例 - 也就是说,它似乎并不关心它是什么一个简单的属性而不是一个集合,我怀疑如果你输入多个条目只会导致最后一个条目。
仅供参考...如果您之前没有这样做,请准备好被intellisense惹恼。在对类进行更改后更新行为可能会令人讨厌,您需要重新编译,并且可能需要等待一段任意时间才能按照预期的方式运行。
答案 1 :(得分:0)
您需要将它作为复合控件类中的属性公开: -
public string LabelText
{
get
{
return Label.Text;
}
set
{
Label.Text = value;
}
}
然后您可以从服务器标签控制它,如: -
<cfw:MyCompositeControl runat="server" LabelText="Test" />
答案 2 :(得分:0)
您应该公开一个返回/设置Label的Text属性的公共属性。 MSDN
修改强>: 您不建议从页面访问复合控件的所有子控件:
MyCompositeControl.FindControl(ID)
(或扩展方法)访问子控件,如果要删除控件或更改ID,那么非常静态且容易出错。