我可以在ASP.NET子控件中重用常用的Html吗?

时间:2011-02-04 19:22:09

标签: c# asp.net html

我的页面中有5个不同的HTML片段,其中包含相同的脚手架HTML,如下所示:

//PanelBase.ascx

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

每种面板类型的所有PANEL-SPECIFIC事物都不同。有没有办法我可以创建一个公共基本控件来处理这个脚手架并继承它来提供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>

基本上,我正在寻找一些方法来重用我控制的常见部分,所以我不必为每个孩子复制它。

3 个答案:

答案 0 :(得分: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" />

这使您能够在用户控件的代码中修改,验证,操作或修改任何内容。它还允许在运行时修改控件本身。您还可以覆盖公共控件的加载和呈现事件,以根据您创建的任何设置执行特定操作。

答案 1 :(得分:0)

我认为“最合适”的做法是将容器的主要内容作为模板,但是这需要您在所有面板中键入<ContentTemplate></ContentTemplate>,这不太理想。

如果我必须这样做,我可能会覆盖AddParsedSubObject,将任何子控件收集到一个集合中,并将它们添加到PlaceHolder或类似的CreateChildControls中。这可以通过自定义控件或用户控件(.ascx)来完成。

对于标题等等,只需使用Literals并创建包装Literal.Text属性的属性。

答案 2 :(得分:-1)

您可能需要查看Nested Master Pages