1

ナビゲーション メニューを生成する部分ビューを Umbraco 6.1.6 で作成しました。

@inherits UmbracoTemplatePage
@using System.Collections;
@using System.Linq;
@{
   Layout = null;
   var articleParent = Model.Content.AncestorOrSelf(1);
}


<ul>
    @foreach (var page in articleParent.Descendants("Artikel").Where(x => x.IsVisible()))
{
   <li><a href="@page.NiceUrl()">@page.Name</a></li>
}

</ul>

このメニュー項目のリストをバックエンド コードで取得し、ビューでリストをレンダリングする前にさらに処理したいと考えています。どうすればいいですか?カスタムコントローラーなどを作成する必要がありますか? ビューコードで余分な処理をしたくありません。

ありがとう

4

2 に答える 2

2

拡張メソッドを作成し、AppCode フォルダーに配置します。

public static NodesExtensions
{
    public static void Process(this DynamicNodeList nodes)
    {
        foreach(var node in nodes)
        {
            //process node
        }
    }
}

そして、あなたの見解よりも

@inherits UmbracoTemplatePage
@using System.Collections;
@using System.Linq;
@{
   Layout = null;
   var articles = Model.Content
                       .AncestorOrSelf(1)
                       .Descendants("Artikel");
   articles.Process();

   //you can now render the nodes 
}
于 2013-10-09T17:03:46.483 に答える
0

MVC と Umbraco をもう少し掘り下げて、カスタム コントローラーを使用するソリューションを作成しました。基本的なアプローチはこれです。

プロジェクトの Models フォルダーにモデルを作成します。

namespace MyProject.Models
{
    public class MenuModel
    {
        // My Model contains just a set of IPublishedContent items, but it can
        // contain anything you like

        public IEnumerable<IPublishedContent> Items { get; set; }
    }
}

Views > Shared フォルダで新しい部分ビューを作成します。

@inherits UmbracoViewPage
@{
   Layout = null;
}
<ul> 
    @* Iterate over the items and print a link for each one *@
    @foreach (var page in Model.Items)
    {
        <li><a href="@page.Url()">@page.Name</a></li>
    }
</ul>

ノードの取得やモデルの構築などのビジネス ロジックを実行するための SurfaceController を作成します。

using System.Web.Mvc;
using MyProject.Models;
using Umbraco.Core;
using Umbraco.Web;
using Umbraco.Web.Models;
using Umbraco.Web.Mvc;

namespace MyProject.Controllers
{
    public class NavMenuController : SurfaceController
    {
        public ActionResult Render(RenderModel some)
        {
           // Get the current homepage we're under (my site has multiple, because it is multi-language)
           var currentHomePage = CurrentPage.AncestorOrSelf(1);
           // Create model object
           var menuModel = new MenuModel();
           // Select descendant "Artikel" nodes of the current homepage and set them on the menu model
           menuModel.Items = currentHomePage.Descendants("Artikel").Where(x => x.IsVisible());
           // Return the partial view called NavMenu

           // Do any processing you like here...

           return PartialView("NavMenu", menuModel);
         }
    }
}

次のコード行を使用して、どこからでも新しい部分ビューを呼び出します。

@Html.Action("Render", "NavMenu")

これも our.umbraco.org に投稿しました。

http://our.umbraco.org/forum/developers/api-questions/45339-Umraco-6-Looking-for-the-MVC-equivalent-of-codebehind-file?p=0#comment163126

于 2013-10-10T15:29:49.007 に答える