[英]How to access a silverlight control's properties and methods from an aspx page?
[英]Settings properties of a child in a composite control in an .aspx page
我有一個復合控件( class
),該控件通過get屬性公開了asp:Label
。 是否可以通過aspx-code設置Label的Text
屬性?
我想做這樣的事情: <cfw:MyCompositeControl runat="server" Label.Text="Test" />
一種解決方案是將每個屬性添加到復合類(如公共LabelText),但是我想設置任何子控件的任何屬性。 因此,隨着子控件的新功能可用,我希望能夠在我的復合控件上使用它們。 所以基本上我想設置暴露的子控件的任何屬性 。
您可以使用內部屬性來做到這一點:
[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將允許您在<MyTag:MyControl>
內創建多個TestLabel
實例-也就是說,似乎並不在乎它是一個簡單的屬性,而是除了收藏之外,我懷疑如果您輸入多個條目,只會產生最后一個條目。
僅供參考...如果您以前沒有做過,請准備好被智能感知困擾。 在對類進行更改后,更新行為可能會令人討厭,這將使您不得不重新編譯,並且可能需要等待任意時間,然后才能按照預期的方式運行。
您需要在復合控件的類中將其公開為屬性:
public string LabelText
{
get
{
return Label.Text;
}
set
{
Label.Text = value;
}
}
然后,您可以從服務器標簽控制它,例如:
<cfw:MyCompositeControl runat="server" LabelText="Test" />
您應該公開一個公共屬性,該屬性返回/設置Label的Text屬性。 MSDN
編輯 :不建議您從頁面訪問復合控件的所有子控件:
MyCompositeControl.FindControl(ID)
(或擴展方法)訪問子控件,如果要刪除控件或更改ID,這將是非常靜態且容易出錯的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.