MVC3 MvcSiteMap()

Я использую вид бритвы MVC3. MvcSitemapProvider dll версия 3.1.0.0

Когда я использую это @Html.MvcSiteMap().SiteMap() в моем razor view я получаю следующее сообщение об ошибке

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 ответа

Я мог бы решить эту проблему, добавив 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>
}

Вы добавили MvcSitemapProvider.dll в качестве ссылки в проекте, в котором вы пытаетесь использовать его?

Я предполагаю, что у вас нет двухэтапного шага:

  1. Добавить DLL в качестве ссылки на сборку
  2. Зарегистрируйте провайдера в вашем web.config

Редактировать:

Поскольку вы упомянули, что dll визуализируется физически, при более внимательном рассмотрении ваши настройки web.config могут быть немного неправильными. Для справки вот руководство по установке.

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

Кажется, что вы зарегистрировали только вспомогательные файлы html в файле web.config

Ваш корневой 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" />

Убедитесь, что у вас установлена ​​новейшая версия MVC SiteMap.

Надеюсь это поможет!

Другие вопросы по тегам