为根节点的子菜单定制MVCSiteMap的输出

时间:2013-06-15 20:30:47

标签: asp.net-mvc-4 razor-2 mvcsitemapprovider

我正在尝试为MVCSiteMap自定义输出布局的外观,并且已经成功修改了MenuHelperModel.cshtml。我唯一的问题是我无法弄清楚如何制作第一个SiteMapNode的子列表?目前输出如下:

•Home 
•Contact US 
•News
    Sports 
•About 

但我希望它看起来像是:

•Home 
     Contact US 
•News
    Sports 
•About

我无法弄清楚如何将联系我们链接到主页链接的子组件,例如Sprots用于新闻。

这是我的SiteMap代码:

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0"
            xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0 WebSiteMapSchema.xsd"
            enableLocalization="true">

    <mvcSiteMapNode title="Home" controller="Home" action="Index">
        <mvcSiteMapNode title="Contact US" controller="Home" action="Contact" />

        <mvcSiteMapNode title="News" controller="Home" action="News">
            <mvcSiteMapNode title="Sports" controller="Home" action="Sprots" />
        </mvcSiteMapNode>

        <mvcSiteMapNode title="About" controller="Home" action="About"/>
    </mvcSiteMapNode>
</mvcSiteMap>

和MenuHelperModel.cshtml:

@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models

<ul>
    @foreach (var node in Model.Nodes) { 
        <li>@Html.DisplayFor(m => node)
            @if (node.Children.Any()) {
                @Html.DisplayFor(m => node.Children)
            }
        </li>
    }
</ul>

我需要修改哪些内容才能使“联系我们”成为“主页”链接的子项?

1 个答案:

答案 0 :(得分:0)

我想我想通了,看起来如果我使用这段代码渲染SiteMap它不会显示第一个节点,这将允许我构建一个新的主菜单并添加子选项。我还没有在子页面上尝试这个,因为我只有一个索引页面。一旦我在子页面上测试它以确保它仍然正确显示我将更新。

@Html.MvcSiteMap().Menu(false)