【问题标题】:Umbraco.Web.Models.DynamicPublishedContentList does not contain a definition for CountUmbraco.Web.Models.DynamicPublishedContentList 不包含 Count 的定义
【发布时间】:2014-03-17 22:17:38
【问题描述】:

我在 Umbraco 7.0.3 宏中遇到错误,该宏遍历所有子项并仅返回一个列表。首先,我使用 Umbraco 后台来构建基本的导航和侧菜单项。同时,一旦设置了本地环境,我就开始在本地工作。

问题是,我使用后台导航构建的代码工作正常,但如果项目是在 VS2012 Ultimate 版本中创建的,则相同的代码不起作用,即使我只是从原始工作导航宏中粘贴相同的代码。

我收到以下错误:“Umbraco.Web.Models.DynamicPublishedContentList”不包含“Any”的定义,表明页面列表是动态的。有趣的是,相同的代码适用于现有导航,那么为什么不使用新项目呢? VS2012 中是否有任何设置将文件标记为无法使用 UTF8 编辑器或无效的 html?

我的问题是如何在 razor 宏中找到计数或任何项目?我已经尝试过 Enumerable items count 和任何方法,但没有用。

有关如何查找存在的项目数量的任何指针都会有所帮助。

我正在提供有关 Paulo 请求的更多信息。 "startNode.Children.Where("Visible").Any()" 行出错。以下是宏代码:

@inherits Umbraco.Web.Macros.PartialViewMacroPage
@*
    === Macro Parameters To Create ===
    Show:True   Alias:nodeId Name:Node ID    Type:Content Picker
*@
@if (Model.MacroParameters["startNodeID"] != null)
{
    @* Get the start node as a dynamic node *@
    var startNode = Umbraco.Content(Model.MacroParameters["startNodeID"]);

    if (startNode.Children.Where("Visible").Any())
    {
        <div class="container">
            <div class="row">
                @foreach (var page in startNode.Children.Where("Visible"))
                { 
                    <div class="col-sm-3 col-md-3">
                        <div class="thumbnail">
                            <img src="~/images/Tiles/300x200.jpg" alt="@page.Name">
                            <div class="caption">
                                <h3><a href="@page.Url">@page.Name</a></h3>
                                <p>@page.GetPropertyValue("summary").Substring(0, 100)</p>
                                <a href="@page.Url" class="btn btn-default">Read More</a>
                            </div>
                        </div>
                    </div>
                }
            </div>
        </div>
    }
}

【问题讨论】:

  • 对不起,您的研究还不够。对于不熟悉 Umbraco 的人,您没有详细说明问题。
  • 嘿 Paulo,我已经编辑了问题并添加了更多信息,如果这更有意义,请告诉我。
  • startNode.Children.Where("Visible")的返回值是什么类型?是IEnumerable&lt;T&gt;吗? Enumerable.Any(startNode.Children.Where("Visible")) 有效吗?

标签: c# visual-studio-2012 razor macros umbraco7


【解决方案1】:

我刚刚遇到了同样的问题,以下方法对我有用:只需 cast 你的 umbraco 属性到一个 DynamicPublishedContentList 变量(假设该属性确实是这样的类型)。

例子:

var homePage = CurrentPage.AncestorsOrSelf().Where("DocumentTypeAlias == @0", "yourPageAlias").FirstOrDefault();

var umbracoFolder = homePage.yourUmbracoFolderName;
var umbracoFolderItems = Umbraco.Content(umbracoFolder.ToString());

Umbraco.Web.Models.DynamicPublishedContentList yourList = umbracoFolderItems.yourItems as Umbraco.Web.Models.DynamicPublishedContentList;

yourList.Count() 可以工作。

更新:上述方法可行,但您可以通过使用 List 而不是 DynamicPublishedContentList 让您的生活更轻松,因此您不仅拥有常规的 IEnumerable 扩展方法,还拥有索引器。

List<dynamic> items = new List<dynamic>(umbracoFolderItems.yourItems);

【讨论】:

    【解决方案2】:

    我猜你缺少using System.Linq 指令。

    【讨论】:

    • 对不起,保罗,但它没有奏效。我相信 Umbraco 必须默认添加所有“基本/必需”命名空间。 #不知道
    • 我假设有一个接受字符串的Where 方法。但是看代码,可能不是故意的。你想做什么?能否提供非 LINQ 等效代码?
    • 这不起作用,因为扩展方法不能动态绑定,但您可以很容易地验证这一点:dynamic x = new int[10]; Console.WriteLine(x.Any())。它会失败
    猜你喜欢
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多