调用node.NiceUrl在Umbraco中给了我#

时间:2011-04-29 08:02:36

标签: c# .net umbraco

在Umbraco做一个项目,我在一个案例中遇到了问题,当调用node.NiceUrl时,我得到#作为结果。但奇怪的是,如果我以某种方式调试它,它会解析为正确的URL。

var pages = Pages.Select((item, index) => new
{
    Url = item.NiceUrl,
    Selected = item.Id == currentPage.Id,
    Index = index
}).ToList();

从哪里获取页面:

CurrentPage.Parent.ChildrenAsList

3 个答案:

答案 0 :(得分:3)

如果我这样做,它有效,但我不知道为什么。

 Url = new Node(item.Id).NiceUrl,

答案 1 :(得分:3)

我遇到了这个错误,那是因为id属于媒体节点。

媒体的处理方式与其他内容不同,因为different types of media store the url in different ways depending on context没有简单的方法来获取网址。这就是NiceUrl功能不适用于媒体的原因(根据umbraco开发人员的说法)。

我的具体方案是使用已使用媒体选择器选择的图像。我通过以下代码获取了url。我将它包装在扩展方法中,以便您可以方便地从模板中使用它。

public static string GetMediaPropertyUrl(this IPublishedContent thisContent, string alias, UmbracoHelper umbracoHelper = null)
{
    string url = "";

    if (umbracoHelper == null)
        umbracoHelper = new UmbracoHelper(UmbracoContext.Current);

    var property = thisContent.GetProperty(alias);

    string nodeID = property != null ? property.Value.ToString() : "";

    if (!string.IsNullOrWhiteSpace(nodeID))
    {
        //get the media via the umbraco helper
        var media = umbracoHelper.TypedMedia(nodeID);

        //if we got the media, return the url property
        if (media != null)
            url = media.Url;
    }

    return url;
}

答案 2 :(得分:2)

试试这个

    Url = umbraco.library.NiceUrl(Item.Id);