0

Umbraco 7.0.3 マクロでエラーが発生しました。このマクロはすべての子をトラバースし、リストにすぎません。まず、Umbraco バック オフィスを使用して、基本的なナビゲーションとサイド メニュー項目を作成しました。一方、ローカル環境がセットアップされたら、ローカルで作業を開始しました。

問題は、ナビゲーション用にバック オフィスを使用してビルドしたコードは正常に動作しますが、項目が VS2012 Ultimate バージョンで作成された場合、元の動作中のナビゲーション マクロから同じコードを貼り付けただけでも、同じコードが動作しないことです。

次のエラーが表示されます:「Umbraco.Web.Models.DynamicPublishedContentList」には「Any」の定義が含まれていません。これは、ページ リストが動的であることを示しています。面白いことに、既存のナビゲーションでは同じコードが機能しますが、新しいアイテムでは機能しないのはなぜですか? VS2012 に、ファイルを UTF8 エディターまたは無効な html で使用できないとマークする設定はありますか?

私の質問は、カミソリ マクロで count または Any アイテムを見つけるにはどうすればよいですか? 私はすでに 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>
    }
}
4

2 に答える 2

7

同じ問題に遭遇したばかりで、次の方法でうまくいきました.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()動作します。

更新:上記は機能しますが、DynamicPublishedContentList の代わりに List に対して作業することで作業が楽になるため、通常の IEnumerable 拡張メソッドだけでなく、インデクサーも使用できます。

List<dynamic> items = new List<dynamic>(umbracoFolderItems.yourItems);
于 2015-03-01T16:55:38.720 に答える
0

using System.Linqディレクティブが不足していると思います。

于 2014-03-18T10:05:37.990 に答える