【问题标题】:ASP.NET MVC SiteMapASP.NET MVC 站点地图
【发布时间】:2011-06-07 10:44:24
【问题描述】:

我一直在疯狂地试图弄清楚为什么我不能让 ASP.NET MVCSiteMap 工作。

我已从 CodePlex(2.3 版)下载了最新版本,并按照CodePlex 中的说明设置了参考。我下载了 DisplayTemplates 并设置了一个基本的 Mvc.sitemap 文件:

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-2.0" enableLocalization="true">
    <mvcSiteMapNode title="Dashboard" controller="Admin" action="Index" changeFrequency="Always" updatePriority="Normal">
        <mvcSiteMapNode title="Users" controller="Users" action="Index" />
        <mvcSiteMapNode title="Reports" controller="Reports" action="Index" />
    </mvcSiteMapNode>
</mvcSiteMap>

使用 HTML Helper 生成基本菜单时,我得到一个空白输出:

<%: Html.MvcSiteMap().Menu() %>

在MenuHelperModel.ascx DisplayTemplate中,我输出的是节点数:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl`1[ [MvcSiteMapProvider.Web.Html.Models.MenuHelperModel,MvcSiteMapProvider] ]" %>
<%@ Import Namespace="System.Web.Mvc.Html" %>
<%@ Import Namespace="MvcSiteMapProvider.Web.Html.Models" %>

<%: Model.Nodes.Count %>

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

结果输出是:

0

我无法弄清楚我做错了什么。我没有收到任何错误,我正在使用 CodePlex 项目站点提供的 Mvc.sitemap 文件,并对我的操作/控制器进行了一些小的修改。

注意:我也下载了示例项目,但它不会为我编译,而且所使用的站点地图文件太复杂,以至于我在了解如何使用它的早期阶段无法弄清楚。

非常感谢任何帮助。

【问题讨论】:

    标签: asp.net-mvc-2 mvcsitemapprovider


    【解决方案1】:

    2.3 版本已准备好用于 MVC3。我重新编译了新的源代码,添加了对 MVC2 程序集的引用,更改了两行代码,直到我有一个可以工作的 MvcSitemap.dll

    在您的 Mvc.sitemap 中,我必须将命名空间更改为:

    http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0

    (注意最后是-3.0而不是-2.0,最新版本是-4.0)

    并确保控制器的名称与您测试它的控制器匹配,否则安全机制将阻止任何显示。

    请注意,该项目已移至 Github,命名空间仍在引用 codeplex.com。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题 - 节点数为 0。我找到了解决问题的方法,希望对您有所帮助。

      在 App_Start -> RouteConfig.cs 我有:

      routes.MapRoute("Robots.txt",
                   "robots.txt",
                   new { controller = "Home", action = "Robots" },
                   namespaces: new string[] { "Mvc4AppNamespace.Controllers" });
      

      我删除了namespaces: new string[] { "Mvc4AppNamespace.Controllers" },它起作用了。就我而言,问题在于命名空间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-21
        • 2010-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多