0

ユーザー コントロール用に 1 つのコード ビハインドを作成しようとしていますが、別のサイト (およびおそらくページ) には、その HTML の独自の HTML テンプレートが必要になります。html は、フロントエンド開発者が dll プッシュなしで変更できる必要もあります。

以前は、すべてのコントロールをバインドするコード ビハインドを含む標準の ascx を作成することでこれを行っていました。次に、フロント エンドの開発者に ascx のコピーを作成してもらい、新しい ascx のマークアップを変更します (元の定義と正確に一致するコード ビハインドを残します)。次に、実際にどの ascx を使用するかをコントロールに指示する設定を行うと、すべてが正しく接続されます。

ただし、これを達成するためのより良い方法があるかどうか疑問に思っています。特に、1 つのサイトに不要な asp コントロール (ラベルなど) を削除するだけで例外が発生するため)

理想的な世界では、MVC または MVP タイプのシステムに似たものを好みますが、カスタム コントロールを追加する必要がある純粋なオリジナルの Web フォーム システムに行き詰まっています。

同じコードビハインドを共有する複数の ascx を作成するよりも、テンプレート化を実現するためのより良い方法はありますか?

ソース管理でテンプレートを追跡できるように、テンプレートの物理ファイルは必須であることに注意してください。

4

1 に答える 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 に答える