2011-06-14 85 views
0

我已經看到了所有常見頁面,其中包含有關如何創建允許用戶控件中的內容的子標記的信息(使用ITemplate和作INamingContainer),但我還沒有看到任何人都能夠添加成爲屬性的屬性說的標籤,例如:如何在ASP.Net中將屬性/屬性添加到HTML標記容器標記中

<asp:MyControl runat="server" ID="myControlTest" SomeAttribute="SomeValue"> 
    <Content ContentAttribute="Something"> 
     <a href="SomePage.aspx" alt="Blah">Blah</a> 
    </Content> 
</asp:MyControl> 

如果你看到在內容標籤的ContentAttribute,就是想什麼我是能夠實現,但是如果我使用ITemplate和INamingContainer等設置它,我可以添加一個實際上出現在該標記的Intellisense中的屬性,但是當我運行代碼時,它說內容沒有名爲ContentAttribute的屬性/屬性(它也給了山姆e作爲VS IDE中的警告,但仍然允許我編譯它)。

我已經嘗試了一切,使這項工作,迄今唯一的方法似乎是如果我MyControl的Content屬性從System.Web.UI.Control繼承並實現ITemplate的類。這很有效,但不幸的是我必須在Content標籤中指定runat屬性(因爲它將它視爲控件而不是子標籤),我寧願不這樣做,如果可能的話。

希望我已經解釋得很好,如果我沒有請讓我知道,我會盡我所能進一步闡述。

在此先感謝。

回答

1

我認爲你所提出的就像是一個MIME電子郵件,其中有可變數量的部分,每個部分都有一個標識符供客戶端選擇它可以處理的最佳電子郵件版本。我假設你想在運行時根據該屬性選擇合適的模板。

就我所知,標準的.NET控件並沒有以這種方式實現。認爲其具有的Repeater:

<asp:Repeater id="myRepeater" runat="server"> 
    <HeaderTemplate>...</HeaderTemplate> 
    <ItemTemplate>...</ItemTemplate> 
    <FooterTemplate>...</FooterTemplate> 
</asp:Repeater> 

每個子項(模板)的具有不同的名稱,而不是與一個單獨的屬性相同的名稱。

是否有任何方法可以提前定義所有可能的區段,中繼器的工作方式?

<asp:MyControl runat="server" ID="myCtlTest">        
    <SomethingTemplate><a href="SomePage.aspx" alt="Blah">Blah</a></SomethingTemplate> 
    <OtherTemplate><a href="OtherPage.aspx" alt="Blah">Blah</a></OtherTemplate> 
</asp:MyControl> 

我猜測不是,而是想扔掉那裏萬一。

或者,ContentAttribute可以移動到MyControl嗎? SETter會根據這個值爲你加載/建立模板。

<asp:MyControl runat="server" ID="myCtlTest" ContentAttribute="Something"> 
    <Template></Template>       
</asp:MyControl> 

...或者它可以使用方法而不是使用屬性SETter加載。

如果您總是需要多個模板,也許這兩個概念的組合會有所幫助。

<asp:MyControl runat="server" ID="myControlTest" 
       SomethingTemplate="Something" 
       OtherTemplate="Other"> 
    <SomethingTemplate></SomethingTemplate>       
    <OtherTemplate></OtherTemplate>       
</asp:MyControl> 
+0

嗨史蒂夫,感謝您的建議 - 絕對有很多我沒有考慮在那裏,他們是非常好的建議。關於你是否事先知道這些部分的問題,我會,但我不知道這些部分的內容。我可以將屬性放在父標籤上,但是我失去了邏輯,因爲在父項上擁有這樣的屬性似乎很奇怪,而且我想讓內容標籤成爲一個我可以在多個用戶控件中使用的通用類,因此我必須將這些屬性添加到使用此通用內容標記的每個控件。 – Anupheaus 2011-06-14 14:00:49

相關問題