2009-12-21 42 views
1

我在C#中創建了一個SharePoint Web部件,該部件使用UpdatePanel來實現一些AJAX魔術。一切工作正常,但我想知道如何佈局我的控件可視化(不使用SharePoint設計器)。我只有兩個下拉列表,一些標籤,一個按鈕和一個文本框。我在重寫的CreateChildControls中創建它們。謝謝!SharePoint AJAX C#Web部件 - UpdatePanel控件的可視佈局

回答

1

有幾種方法可以將它們佈置出來。您可以添加一個Table對象並添加行,單元格等,並將您的控件添加到單元格中。

或者,您可以重寫RenderContents方法並直接將HTML輸出到作爲參數傳入的寫入。如果你使用這種方法(使用Table對象的工作可能更少並且效率更高),那麼應該使用StringBuilder來構建HTML,然後將結果輸出到writer。這種方法應該會讓你獲得一些性能。

不幸的是,這種方法沒有可視化的WYSIWIG編輯器。

+0

感謝您的答覆。我決定繼續使用Table類,因爲它會很快,並且我並不擔心瀏覽器標準符合SharePoint(考慮到默認門戶頁面當前通過W3C驗證程序拋出277錯誤)。 – 2009-12-21 18:51:46

0

不幸的是,沒有以編程方式創建的Web部件的可視化設計器。

您可以使用用戶控件和來自codeplex的SmartPart Web部件來獲得.ascx用戶控件的可視化設計器的優勢。

2

在你的控件周圍添加一個容器面板並給它一個類。將面板添加到UpdatePanel的容器中。將所有其他控件添加到新面板的控件中。

你現在可以使用css來做你的樣式,使用容器面板的CssClass作爲參考。

代碼

protected override CreateChildControls() 
{ 
    // .. creation of updatepanel, say upd1 
    Panel container = new Panel{CssClass = "webpartContainer"}; 
    upd1.ContentTemplateContainer.Controls.Add(container); 

    container.Controls.Add(dropdown1); // etc. etc. 
} 

的CSS:

.webpartContainer 
{ 
    /* if needed add some style here also */ 
} 

.webpartContainer select 
{ 
    /* add style */ 
} 

.webpartContainer .specificClass 
{ 
    /* give controls a class of their own in CreateChildControls 
    if controls of the same type need different styling 
    (i.e. you have more than 1 select that need to look different) */ 
} 
+0

非常感謝您的回答。我真的很喜歡這個解決方案的優雅和它避免表格的事實(我的背景是比開發更多的網頁設計,所以表格= ick),但在這種情況下,我想避免額外的面板。不過,我確實喜歡這個,因爲我總體上更喜歡它作爲解決方案;我只是覺得在這種特殊情況下,另一種方式對我更好。 – 2009-12-21 18:54:06

+0

很高興看到開發人員可以在CSS中看到C的部分值:-D。不幸的是,使用1個容器作爲開始元素來基於樣式,從那裏開始級聯/指定樣式,這在開發人員中並不是一種廣泛使用的做法。上帝我厭惡內聯樣式屬性.... :-D。 – Colin 2009-12-21 19:09:39

+0

這些做法不太廣泛,這太糟糕了。我認爲問題的根源在於開發者/設計師的裂痕。你不會發現許多介意內聯風格的開發人員,而設計人員通常沒有足夠深入的後端理解來正確地解決這些問題。就像我說的那樣,我喜歡這個解決方案,而且我一定會與它合作,以便將來可以將它整合,特別是當我不使用SharePoint時。再次感謝! – 2009-12-22 13:07:01

0

您可以使用ASCX文件在Web部件..只是從你的WebPart類加載它的CreateChildControls像這樣:

var control = Page.LoadControl("/_CONTROLTEMPLATES/yourproject/your.ascx"); 
Controls.Add(control); 

通過這種方式,您可以使用Visual Studio的正常方式來佈置您的web部件。比在代碼中構建HTML要好得多,這至少是一種痛苦。

(這也比使用的SmartPart這會導致與trustlevel和部署問題要好得多)

相關問題