【问题标题】:How can I easily create templates for a custom asp.net Web Forms control?如何轻松地为自定义 asp.net Web 窗体控件创建模板?
【发布时间】:2012-11-19 21:21:47
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 主题的修改程度如何?我们是在谈论可以通过OutlineColorBackgroundUrl 属性轻松实现的东西,还是对设计进行彻底改造?
  • 从一个站点到另一个站点,它们可能是完全不同的标记,从使用的类到控件上某些 html 节点的位置
  • 使用skins怎么样? (可能不够通用?)
  • 是的,这看起来不够通用。如果我们可以通过 CSS 控制一个编写良好的 HTML 标记,它可以在所有看起来是最佳选择的网站上工作,但我们需要更多的灵活性,包括更改日期显示格式的可能性(通过数据绑定完成日期属性并通过代码或在前端绑定转发器中显示在 ascx 中)
  • 如何制作可以通过控件上的公共属性设置的 HTML 模板?那么控件会使用适当的模板吗?

标签: c# asp.net webforms


【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多