2010-11-02 116 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

相关问题