2010-11-02 153 views
1

我正在使用Umbraco 4.5.2,並且我有一個包含多個子節點的節點。每個子節點代表將在控件中呈現的HTML片段。控制循環遍歷所有的子節點並渲染它們。以編程方式呈現Umbraco節點

就目前而言,爲了讓事情進展(對Umbraco來說還是比較新的),我有一點骯髒的黑客行爲,但我寧願做得更好。

我此刻的代碼如下所示:

private string GetItemHtml(Node node) 
{ 
    // Work out the URL of the HTML fragment 
    string url = "http://" + Context.Request.Url.Host + 
     ":" + Context.Request.Url.Port + 
        node.Url; 

    // Get the fragment by making a call to the page 
    WebRequest req = WebRequest.Create(url); 
    WebResponse res = req.GetResponse(); 
    using (Stream stream = res.GetResponseStream()) 
    { 
     StreamReader reader = new StreamReader(stream); 
     string result = reader.ReadToEnd(); 
     return result; 
    } 
} 

正如你所看到的,這實在是相當難看。我希望有一些方法可以在不需要進行多次HTTP調用的情況下獲得該調用,即使它正在循環回到同一臺服務器 - 它效率也不高。

回答

2

您可以使用API​​來實現你的要求,嘗試尋找在一把umbraco。 library.RenderTemplate方法。它接受兩個參數,第一個是要渲染的節點的ID,第二個是渲染節點時使用的模板的ID。

0

在umbraco中使用xslt可能會更容易。如果你想做一些xslt中不可能的事情,你可以創建一個XSLT擴展函數(用C#實現,用XSLT調用)來實現這一功能(有關更多信息,請參閱http://en.wikibooks.org/wiki/Umbraco/Create_xslt_exstension_like_umbraco.Library_in_C)。

對於樣品XSLT,列出子頁面,看到BlogListPosts.xslt在一把umbraco博客包:

http://blog4umbraco.codeplex.com/SourceControl/changeset/view/54177#916032

相關問題