Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 带有Ninject控制器工厂错误的ASP.NET MVC站点地图_Asp.net Mvc_Asp.net Mvc 2_Sitemap_Ninject - Fatal编程技术网

Asp.net mvc 带有Ninject控制器工厂错误的ASP.NET MVC站点地图

Asp.net mvc 带有Ninject控制器工厂错误的ASP.NET MVC站点地图,asp.net-mvc,asp.net-mvc-2,sitemap,ninject,Asp.net Mvc,Asp.net Mvc 2,Sitemap,Ninject,我正在尝试将ASP.NET MVC Codeplex站点地图项目与自定义动态节点提供程序一起使用。这是我的节点提供程序代码。它使用一些存储库来访问数据库。我实际上没有在这个类中使用DI,但是应用程序继承了NinjectHttpApplication,并且站点地图在获取控制器时遇到问题 public class ContentPageDynamicNodeProvider : DynamicNodeProviderBase { private IRepository _repository

我正在尝试将ASP.NET MVC Codeplex站点地图项目与自定义动态节点提供程序一起使用。这是我的节点提供程序代码。它使用一些存储库来访问数据库。我实际上没有在这个类中使用DI,但是应用程序继承了NinjectHttpApplication,并且站点地图在获取控制器时遇到问题

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;
    }
}
我遇到的问题是,当自定义站点节点提供程序就位时,我在运行时遇到以下错误:

值不能为null或空。 参数名称:controllerName

这是堆栈跟踪,可能有助于确定发生了什么。据我所知,它去Ninject的控制器,但没有得到一个

[ArgumentException:值不能为空 null或空。参数名称: 控制器名称] System.Web.Mvc.DefaultControllerFactory.CreateControllerRequestContext requestContext,字符串控制器名称 +167 Ninject.Web.Mvc.NinjectControllerFactory.CreateControllerRequestContext requestContext,字符串控制器名称 +151 MvcSiteMapProvider.AuthorizeAttribute每个模块.IsAccessibleTousEric控制器类型解析程序 控制器类型分解器, DefaultSiteMapProvider提供程序, HttpContext上下文,SiteMapNode节点 +533 MvcSiteMapProvider.DefaultAclModule.IsAccessibleTousEricController类型解析器 控制器类型分解器, DefaultSiteMapProvider提供程序, HttpContext上下文,SiteMapNode节点 +149 MvcSiteMapProvider.DefaultSiteMapProvider.IsAccessibleToUserHttpContext 上下文,SiteMapNode节点+24 System.Web.SiteMapNode.IsAccessibleToUserHttpContext 上下文+17 System.Web.SiteMapProvider.ReturnNodeFaccessibleSitemPaNode 节点+42 System.Web.StaticSiteMapProvider.FindItemsNodeString rawUrl+176 MvcSiteMapProvider.DefaultSiteMapProvider.FindItemsNodeHttpContext 上下文+282 System.Web.SiteMapProvider.get\u CurrentNode +56 MvcSiteMapProvider.Web.Html.SiteMapPathHelper.SiteMapPathMvcSiteMapHtmlHelper 助手,字符串分隔符,字符串 分离器类,字符串 linkCssClass,布尔型 当前节点链接,对象 HTMLAT贡品+81 MvcSiteMapProvider.Web.Html.SiteMapPathHelper.SiteMapPathMvcSiteMapHtmlHelper 助手+30 ASP.views\u site\u master.\u渲染\u控件1HtmlTextWriter __w、 控制参数container+499

谢谢你的帮助


另外请注意,如果没有自定义节点提供程序,.sitemap文件中只有静态节点,一切正常。

只是一个想法,但是您需要添加控制器和操作值吗

node.RouteValues.Add("controller", "Page");
node.RouteValues.Add("action", "Display");

您的第一条路由不会匹配任何内容并始终被使用吗?不,空url表示根。。
        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
            );
node.RouteValues.Add("controller", "Page");
node.RouteValues.Add("action", "Display");