0

我正在努力做到这一点,因此我们为用户控件提供了一个代码,但不同的站点(很可能是页面)将需要他们自己的 HTML 模板。前端开发人员还需要在没有 dll 推送的情况下修改 html。

以前,我通过创建一个标准的 ascx 来完成此操作,其中包含绑定所有控件的代码。然后,我让前端开发人员制作 ascx 的副本并更改新 ascx 的标记(使定义后面的代码与原始代码完全匹配)。然后有一个设置告诉控件使用哪个实际的 ascx,并且一切都正确连接。

但是,我想知道是否有更好的方法来实现这一点,特别是因为删除一个站点不需要的 asp 控件(如标签)这样简单的事情会导致异常)

在一个理想的世界里,我更喜欢类似于 MVC 或 MVP 类型的系统,但我被困在纯粹的、原始的 webforms 系统中,我需要添加自定义控件。

有没有比创建多个 ascx 共享相同代码更好的方法来实现模板化?

请注意,模板的物理文件是必须的,以便我们可以在源代码管理中跟踪模板。

4

1 回答 1

1

鉴于您的限制,我认为您在共享代码隐藏方面处于正确的轨道上。在您的要求中突出的一件事是能够在不破坏代码隐藏的情况下删除控件。您可以通过在基类(您当前的代码隐藏)和 ascx 之间添加中间代码隐藏来实现此目的。

基类(您重构的代码隐藏)

Public MustInherit Class BaseUC
Inherits System.Web.UI.UserControl

' Define all page controls here
Public MustOverride Property lblPageTitle As Label

Private Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    ' Check if control has been initialized by inheriting class
    If lblPageTitle IsNot Nothing Then
        lblPageTitle.Text = "Hooray"
    End If

End Sub
End Class

新的特定于站点的代码

Partial Class controls_Sample
Inherits BaseUC

Public Overrides Property lblPageTitle As System.Web.UI.WebControls.Label
    Get
        Return title
    End Get
    Set(value As System.Web.UI.WebControls.Label)
        title = value
    End Set
End Property
End Class

站点特定的 ASCX

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="Sample.ascx.vb" Inherits="controls_Sample" %>

<asp:Label runat="server" ID="title"></asp:Label>
于 2012-11-20T03:49:40.157 回答