2010-10-13 23 views
0

我有一個用戶控件,其中包含一些子控件。我希望能夠通過用戶控件的屬性更改控件的佈局(即更改子控件周圍的標記),但我不想自己複製子控件。這排除了在每個視圖中使用具有不同版本佈局的MultiView,因爲在那種情況下,我必須重複控件。我寧願使用標記而不是直接發佈控件的代碼(就像在服務器控件中那樣)。我應該如何着手創建具有可變佈局的用戶控件?

給一個人爲的例子,說我有一個標籤和一個文本框。在一種佈局中,我希望標籤和文本框被div包含並且彼此重疊。在另一種佈局中,我希望將它們並排放在一張桌子中。

我應該繼續並重復每個視圖之間的控件嗎?這似乎違反了DRY原則,但我不確定我是否有很多選擇。部分解決方案是將多視圖的視圖轉換爲命名容器,這樣我至少可以節省自己必須在重複的控件ID前添加一些內容以使它們唯一的時間。

謝謝!請隨時詢問上述內容是否合理。

回答

1

您可以使用templated user control爲用戶控件的每個部分定義頁眉和頁腳模板。從那裏您可以使用用戶控件上的CSS和/或公共屬性來設置控件的預定義(非模板)組件。

+0

有趣的想法......我會研究一下是否可行。 :) – Faisal 2010-10-13 18:09:07

+0

它只需要更多一點代碼就可以讓設計人員在不破壞原始結構的情況下自定義佈局。總而言之,這是一個相當乾淨且時間有效的解決方案。 – 2010-10-13 18:13:22

1

這聽起來好像你應該繼續前進,創建一個服務器控件而不是用戶控件。您必須在代碼中創建標記,但它會爲您提供最佳的靈活性。

+0

我同意你的看法,但不幸的是,我沒有很大的靈活性來改變這種情況......我的團隊中的其他開發人員對服務器控件並不熟悉,所以它會讓他們很難改變它。 – Faisal 2010-10-13 18:00:44

1

一個想法是創建第二個用戶控件,它與設計文件中的第一個相同,但具有相同的代碼文件。

FileLayout1.ascx 
FileLayout2.ascx 

both of this have 
CodeFile="FileLayout1.ascs.cs" Inherits="FileLayout1" 

FileLayout1.ascs.cs 

可以裝載1個或2

侷限性/問題是,這兩個ASCX必須有完全相同的控制名字,和你有相同的控制2次(但代碼只一次)

從我的角度來看,好的想法是,你可以隨心所欲地設計佈局。

相關問題