2011-02-04 42 views
1

我有我的第5個左右不同的HTML代碼段包含相同的腳手架HTML圍繞着它,像這樣:我可以在ASP.NET子控件中重新使用常見的Html嗎?

//PanelBase.ascx 

<div class="panel" id="[PANEL-SPECIFIC-ID]"> 
    <h3>[PANEL-SPECIFIC-HEADER]</h3> 
     ... 
     [PANEL-SPECIFIC-HTML] 
     ... 
    </h3> 
</div> 

,所有的面板具體的事情是每個面板類型不同。有沒有一種方法可以創建一個通用的基礎控件來處理這個腳手架並從它繼承來提供PANEL-SPECIFIC-HTML? PANEL-SPECIFIC-ID和PANEL-SPECIFIC-HEADER我可以直接傳遞給面板,但由於面板特定的HTML非常大,我不想直接將它作爲字符串傳遞。

或者是有一些方法來做到這一點像這樣在每個子控件的ASCX文件:

<my:PanelBase PanelId="myChildPanel" Header="My Child's Header"> 
    // HTML for my child panel. 
</my:PanelBase> 

基本上,我正在尋找一些方法來重用我控制的共同部分,所以不必須爲每個孩子複製它。

+0

是的,只是創建用戶控件,並將這些部分作爲屬性 – 2011-02-04 19:24:53

+0

或服務器控件(我喜歡這種東西) – Sean 2011-02-04 19:26:50

回答

0

我想這樣做的「最合適的」方法是將您的容器的主要內容作爲模板,但是這需要您在所有面板中輸入<ContentTemplate></ContentTemplate>,這並不理想。

如果我必須這樣做,我可能會覆蓋AddParsedSubObject,將任何子控件收集到一個集合中,並將它們添加到PlaceHolder或類似的CreateChildControls中。這可以通過自定義控件或用戶控件完成(.ascx)。

對於標題和whatnot,只需使用Literals並創建包裝Literal.Text屬性的屬性即可。

0

是的,它的一般良好做法是這樣做的。最理想的是將標籤或文字放在可以修改內容的地方。然後在後面的代碼,你會放與他們每個人的特性:

<asp:MyHtmlControl ID="blah" runat="server" DisplayContentTitle="Some text" /> 

這給了你:

'These attributes allow you to specify individual properties about your control 
'particularly if you want to be able to bind data to it, list it in the properties 
'in your IDE, etc. 
<BrowsableAttribute(True), Bindable(False), Category("Misc"), DefaultValue("true"), _ 
     Description("Gets or sets the content title.")> _ 
Public Property DisplayContentTitle() As String 
    Get 
     Return _displayContentTitle 
    End Get 
    Set(ByVal value As Boolean) 
     _displayContentTitle = value 
     Me.litContentTitle.Text = value ' Optional 
    End Set 
End Property 

然後,當您在您的網頁的控制,你會以如下方式進行配置修改,驗證,操作或在用戶控件背後的代碼中的任何功能。它還允許在運行期間修改控件本身。您還可以覆蓋通用控件的加載和呈現事件,以根據您創建的任何設置執行特定操作。

+0

知道,這是我將用於id或標題,但HTML主要部分太大以至於無法將其放入控件的屬性中。 – Paul 2011-02-04 19:53:54

相關問題