以编程方式渲染Umbraco节点

时间:2010-11-02 11:23:16

标签: asp.net umbraco

我正在使用Umbraco 4.5.2,我有一个包含许多子节点的节点。每个子节点表示将在控件中呈现的HTML片段。控件循环遍历所有子节点并呈现它们。

目前我有一点肮脏的黑客为了让事情继续下去(对于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 个答案:

答案 0 :(得分:2)

您可以使用API​​来实现您的要求,尝试查看umbraco.library.RenderTemplate方法。它接受两个参数,第一个是要渲染的节点的id,第二个是渲染节点时要使用的模板的id。

答案 1 :(得分:0)

使用umbraco中的xslt可能更容易构建。如果你想做一些在xslt中无法做到的事情,你可以创建一个XSLT扩展函数(用C#实现,从XSLT调用)来做到这一点(更多信息请参见http://en.wikibooks.org/wiki/Umbraco/Create_xslt_exstension_like_umbraco.Library_in_C)。

有关列出子页面的示例XSLT,请参阅umbraco博客包中的BlogListPosts.xslt:

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