簡體   English   中英

.aspx頁的復合控件中子級的設置屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM