【问题标题】:MVC3 MvcSiteMap()MVC3 MvcSiteMap()
【发布时间】:2012-02-15 21:10:24
【问题描述】:

我正在使用 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 文件中(根以及视图 web.config)。

还有什么需要看的吗?

【问题讨论】:

    标签: asp.net-mvc razor mvcsitemapprovider


    【解决方案1】:

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

    我假设您没有作为两部分步骤:

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

    编辑

    正如您提到的,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 helpers

    【讨论】:

    • 这就是我的根 web.config 的样子
    • 没关系,但您是否实际添加了程序集引用:msdn.microsoft.com/en-us/library/wkze6zky(v=vs.80).aspx
    • 是的,我添加了对 dll MvcSitemapProvider dll 版本 3.1.0.0 的引用这个项目是从 MVC2 到 MVC 3 的升级
    • 已根据您的反馈更新了我的答案,因为经过仔细审查,您似乎错过了 web.config 中提供者的实际注册。
    • 你是对的,当我注册提供者时,我摆脱了这个错误 Method not found: 'Void System.Web.Mvc.WebFormView..ctor(System.String, System.Str' but my MVC 2 中的 sitemapprovider 已停止工作,这是我的 web.sitemap 的样子
    【解决方案2】:

    你的根 web.config 应该在 pages, namespaces 节点中有这个。

          <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 站点地图。

    希望这会有所帮助!

    【讨论】:

    • 另外,在共享的_Layout中,我有
    【解决方案3】:

    我可以通过添加 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>
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多