2011-02-04 5 views
1

私はこのように同じ足場それを囲むHTML、何かが含まれている私のページでHTMLの5かそこらの異なる部分があります:すべてのPANEL-特定の事柄は、各パネルの種類によって異なります 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

はい、ちょうどユーザーコントロールを作成し、それらの部分をプロパティー –

+0

またはサーバーコントロール(私はこの種のもののために好む) – Sean

答えて

0

これを行う "最も適切な"方法は、コンテナのメインコンテンツをテンプレートとして持つことだと思いますが、すべてのパネルに<ContentTemplate></ContentTemplate>を入力する必要があります。これは理想的ではありません。

これを行う必要がある場合は、おそらくAddParsedSubObjectをオーバーライドし、子コントロールをコレクションにまとめてPlaceHolderなどのCreateChildControlsに追加します。これは、カスタムコントロールまたはユーザーコントロール(.ascx)で実行できます。

見出しなどの場合は、Literalsを使用し、Literal.Textプロパティをラップするプロパティを作成します。

+0

素晴らしい、テンプレートは私が必要としたソリューションのように見えます! – Paul

0

はい、そうするのが一般に良い習慣です。理想的なのは、変更可能なコンテンツがある場所にラベルやリテラルを配置することです。そして、あなたの後ろにコードをそれらのそれぞれに関連するプロパティを置くには:

'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 

あなたのページにコントロールが含まれている場合、あなたは次のようにそれを構成します。

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

これは、あなたに与えますユーザーコントロールのコードの背後にある変更、検証、操作などの機能また、実行時にコントロール自体を変更することもできます。共通コントロールのロードイベントとレンダリングイベントをオーバーライドして、作成したこれらの設定に基づいて特定のアクションを実行することもできます。

+0

として公開します。これは私がIDまたはヘッダーに使用するものですが、主要部分は非常に大きいので、コントロールのプロパティの中に入れるのは意味がありません。 – Paul

関連する問題