Карта сайта ASP.NET MVC с заводской ошибкой контроллера Ninject

Я пытаюсь использовать проект карты сайта ASP.NET MVC Codeplex с поставщиком настраиваемых динамических узлов. Это мой код провайдера узла. Он использует некоторый репозиторий для доступа к БД. На самом деле я не использую DI в этом классе, но приложение наследует NinjectHttpApplication, и у Sitemap есть проблемы с получением контроллера.

public class ContentPageDynamicNodeProvider : DynamicNodeProviderBase
{
    private IRepository _repository;

    public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
    {
        // Build value 
        var returnValue = new List<DynamicNode>();

        // Create a node for each content page
        _repository = new XmlDefaultRepository(ContentType.Page);
        foreach(var page in _repository.GetInstances())
        {
            DynamicNode node = new DynamicNode();
            node.Title = page.Title;
            node.ParentKey = "Default";
            node.RouteValues.Add("slug", page.Slug);
            returnValue.Add(node);
        }

        // Return 
        return returnValue;
    }
}

Затем в Site.Master я пытаюсь отобразить хлебные крошки следующим образом:

<%=Html.MvcSiteMap().SiteMapPath() %>

Мой маршрут по умолчанию, который начинается при запуске сайта, - Page / Display / {slug}, а для slug я использую "Default", вот часть global.asax.cs

        routes.MapRoute(
            "DefaultPage", RouteType.Regular,
            "",
            new { controller = "Page", action = "Display", slug = "Default" }, null
            );

        routes.MapRoute(
            "PageBySlug", RouteType.Regular,
            "{slug}",
            new { controller = "Page", action = "Display", slug = "Default" }, null
            );

        routes.MapRoute(
            "Default", RouteType.Regular,
            "{controller}/{action}/{slug}",
            new { controller = "Page", action = "Display", slug = "Default" }, null
            );

У меня проблема в том, что, когда установлен пользовательский поставщик узлов сайта, я получаю эту ошибку во время выполнения:

Значение не может быть нулевым или пустым. Имя параметра: controllerName

Это трассировка стека (возможно, это поможет кому-то определить, что происходит). Насколько я могу судить, он идет на Ninject для контроллера, но не получает его.

[ArgumentException: значение не может быть нулевым или пустым. Имя параметра: имя_контроллера]
System.Web.Mvc.DefaultControllerFactory.CreateController (RequestContext requestContext, String controllerName) +167 Ninject.Web.Mvc.NinjectControllerFactory.CreateController (RequestContext requestContext, String ControllerName) +151 MvcServerAccessAccessAccessMvcSiteMvcSiteMvcSiteMvcSiteMapule IControllerTypeResolver controllerTypeResolver, поставщик DefaultSiteMapProvider, HttpContext контекст, SiteMapNode узел) поставщик +533 MvcSiteMapProvider.DefaultAclModule.IsAccessibleToUser (IControllerTypeResolver controllerTypeResolver, DefaultSiteMapProvider, HttpContext контекст, SiteMapNode узел) +149 MvcSiteMapProvider.DefaultSiteMapProvider.IsAccessibleToUser (контекст HttpContext, SiteMapNode узел) +24 <бр > System.Web.SiteMapNode.IsAccessibleToUser (контекст HttpContext) +17
System.Web.SiteMapProvider.ReturnNodeIfAccessible (узел SiteMapNode) +42
System.Web.StaticSiteMapProvider.FindSiteMapNode (Stri ng rawUrl) +176
MvcSiteMapProvider.DefaultSiteMapProvider.FindSiteMapNode (контекст HttpContext) +282
System.Web.SiteMapProvider.get_CurrentNode () +56 MvcSiteMapProvider.Web.HpertorHtml.SathiteMap separatorCssClass, String linkCssClass, Boolean currentNodeAsLink, Object htmlAttributes) +81
MvcSiteMapProvider.Web.Html.SiteMapPathHelper.SiteMapPath (MvcSiteMapHtmlHelper helper) +30, параметр Helper_Container_Container__

Любая помощь приветствуется.

Также обратите внимание, что без поставщика настраиваемых узлов (только статические узлы в файле .sitemap) все работает нормально.


person mare    schedule 13.08.2010    source источник
comment
Ваш первый маршрут не будет соответствовать чему-либо и всегда будет использоваться?   -  person Jason Goemaat    schedule 26.11.2010
comment
нет, пустой url означает корень ..   -  person mare    schedule 26.11.2010


Ответы (1)


Просто мысль, а нужно ли добавить значения контроллера и действия?

node.RouteValues.Add("controller", "Page");
node.RouteValues.Add("action", "Display");
person Jason Goemaat    schedule 26.11.2010