2011-01-11 40 views
5

我一直疯了,试图找出为什么我不能让ASP.NET MVCSiteMap工作。ASP.NET MVC SiteMap

我已经从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辅助生成一个基本的菜单,我得到了一个空白输出:

<%: 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文件,并对我的操作/控制器进行了一些小修改。

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

任何帮助,非常感谢。

回答

1

2.3版本已准备好用于MVC3。我重新编译生源,有一个引用添加到MVC2组件,改变两个代码行,直到我有一个工作MvcSitemap.dll

在你Mvc.sitemap我不得不命名空间更改为:

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

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

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

请注意,该项目已移至Github该名称空间仍然参考codeplex.com。

0

我有同样的问题 - 节点计数为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" }和它的工作。在我的情况下,问题是命名空间。