2012-11-19 96 views
0

我試圖做到這一點,所以我們有一個用戶控件的代碼,但不同的網站(很可能是網頁)將需要他們自己的HTML HTML模板。 html也需要前端開發者修改,而不需要dll的推送。如何輕鬆創建自定義asp.net Web窗體控件的模板?

以前,我通過創建一個帶有後面代碼的標準ascx來完成此任務,該代碼綁定了所有控件。然後,我讓前端開發人員製作ascx的副本,並更改​​新的ascx的標記(將代碼背後的代碼與原始版本完全匹配)。然後有一個設置,告訴控制使用哪個實際的ascx,並且一切都正確掛鉤。

但是,如果有,這不是需要一個網站更好的方法來實現這一目標,特別是爲刪除ASP的控制(如標籤)這樣簡單的事情將導致異常)

在我想知道理想的世界我更喜歡更類似於MVC或MVP類型系統的東西,但我陷入了純粹的原始webforms系統中,我需要添加自定義控件。

有沒有更好的方法來實現模板比創建多個ascx的共享相同的代碼背後?

請注意,模板的物理文件是必須的,以便我們可以跟蹤源代碼管理中的模板。

+0

主題如何修改?我們是否正在談論可以通過OutlineColor或BackgroundUrl屬性輕鬆實現的東西,還是對設計進行徹底檢查? –

+0

從一個站點到另一個站點,它們可能是完全不同的標記,從哪些類被用於控制某些html節點的位置 – KallDrexx

+0

如何使用[皮膚](http://msdn.microsoft.com/en-us/庫/ ykzx33wh%28V = VS.100%29.aspx)? (可能不夠多才多藝?) –

回答

1

鑑於您的限制,我認爲您在分享代碼隱藏方面走在了正確的軌道上。在您的需求中突出的一件事是能夠在不破壞代碼隱藏的情況下刪除控件。您可以通過在基類(您當前的代碼隱藏)和ascx之間添加中間代碼隱藏來實現此目的。背後

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

基類(您重構代碼隱藏)

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 

新站點特定的代碼

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

<asp:Label runat="server" ID="title"></asp:Label> 
相關問題