MVC3 MvcSiteMap()

时间:2012-02-15 21:10:25

标签: asp.net-mvc razor mvcsitemapprovider

我正在使用MVC3剃刀视图。 MvcSitemapProvider dll版本3.1.0.0

当我在我的razorview中使用此@Html.MvcSiteMap().SiteMap()时,收到以下错误消息

Method not found: 'Void System.Web.Mvc.WebFormView..ctor(System.String, System.String)'.

我已注册名称空间:

<add namespace="MvcSiteMapProvider.Web.Html" />
<add namespace="MvcSiteMapProvider.Web.Html.Models" />

在两个web.config文件中(root和视图web.config)。

还有什么我需要看的吗?

3 个答案:

答案 0 :(得分:0)

您是否已将MvcSitemapProvider.dll添加为您尝试在其中使用的项目中的参考?

我假设你没有两个步骤:

  1. 将dll添加为Assembly Reference
  2. 在web.config中注册提供程序
  3. 修改

    正如您所提到的那样,dll是物理渲染的,仔细检查后,您对web.config的设置可能会稍微偏离。这里的参考是Setup Guide

    <siteMap defaultProvider="MvcSiteMapProvider" enabled="true"> 
      <providers> 
        <clear /> 
        <add name="MvcSiteMapProvider" 
             type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider"
             /> 
      </providers> 
    </siteMap>
    

    您似乎在web.config

    中只有registered the html helper

答案 1 :(得分:0)

你的root web.config应该在页面名称空间节点中有这个。

      <add namespace="MvcSiteMapProvider.Web.Html" />

还有..

   <siteMap defaultProvider="MvcSiteMapProvider" enabled="true">
    <providers>
      <clear />
      <add name="MvcSiteMapProvider"
           type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider"
           siteMapFile="~/Site.sitemap" <!-- This can be changed depending on your .sitemap file -->
           securityTrimmingEnabled="true"
           cacheDuration="5"
           enableLocalization="true"
           scanAssembliesForSiteMapNodes="true"
           skipAssemblyScanOn=""
           attributesToIgnore="bling"
           nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator, MvcSiteMapProvider"
           controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, MvcSiteMapProvider"
           actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, MvcSiteMapProvider"
           aclModule="MvcSiteMapProvider.DefaultAclModule, MvcSiteMapProvider"
           siteMapNodeUrlResolver="MvcSiteMapProvider.DefaultSiteMapNodeUrlResolver, MvcSiteMapProvider"
           siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider" />
    </providers>
  </siteMap>

在您的视图中,web.config,

    <add namespace="MvcSiteMapProvider.Web.Html" />
    <add namespace="MvcSiteMapProvider.Web.Html.Models" />

确保您拥有here的最新版MVC SiteMap。

希望这有帮助!

答案 2 :(得分:0)

我可以通过添加DisplayTemplates来解决这个问题。如何显示模型。

例如:

@model SiteMapNodeModel

@if (Model.IsCurrentNode && Model.SourceMetadata["HtmlHelper"].ToString() != "MvcSiteMapProvider.Web.Html.MenuHelper")  { 
    <text>@Model.Title</text>
} else if (Model.IsClickable) {
    <a href="@Model.Url" class="@(Model.IsCurrentNode ? "selected" : string.Empty)" >@Model.Title</a>
}
else
{ 
    <text>@Model.Title</text>
}