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 в качестве ссылки в проекте, в котором вы пытаетесь использовать его?
Я предполагаю, что у вас нет двухэтапного шага:
- Добавить DLL в качестве ссылки на сборку
- Зарегистрируйте провайдера в вашем 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.
Надеюсь это поможет!