我想使用自定義動態節點提供程序的ASP.NET MVC Codeplex Sitemap項目。這是我的節點提供程序代碼。它使用一些存儲庫來訪問數據庫。我實際上不在這個類中使用DI,但是應用程序繼承了NinjectHttpApplication,並且Sitemap有問題獲取控制器。ASP.NET MVC的SiteMap與Ninject控制器工廠錯誤
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() %>
我的默認路由是頁/顯示/ {}蛞蝓和蛞蝓我用「默認」,這裏是部分的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:值不能爲 null或爲空。參數名稱: controllerName]
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext的 的RequestContext,字符串controllerName) 167 Ninject.Web.Mvc.NinjectControllerFactory.CreateController(RequestContext的 的RequestContext,字符串controllerName) 151 MvcSiteMapProvider。 AuthorizeAttributeAclModule.IsAccessibleToUser(IControllerTypeResolver controllerTypeResolver, DefaultSiteMapProvider提供商, HttpContext的上下文中,節點的SiteMapNode) 533 MvcSiteMapProvider.DefaultAclModule.IsAccessibleToUser(IControllerTypeResolver controllerTypeResolver, DefaultSiteMapProvider provi DER, 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(字符串 rawUrl)176
MvcSiteMapProvider.DefaultSiteMapProvider.FindSiteMapNode(HttpContext的 上下文)282
System.Web.SiteMapProvider .get_CurrentNode() 56 MvcSiteMapProvider.Web.Html.SiteMapPathHelper.SiteMapPath(MvcSiteMapHtmlHelper 幫手,字符串分離器,字符串 separatorCssClass,字符串 linkCssClass,布爾 currentNodeAsLink,對象 htmlAttributes)81
MvcSiteMapProvider.Web.Html。 SiteMapPathHelper.SiteMapPath(MvcSiteMapHtmlHelper 幫手)+30
ASP.views_site_master。__Render__control1(HtmlTextWriter的 __w,控制parameterContainer)499
任何幫助理解。
另請注意,沒有自定義節點提供程序(只是.sitemap文件中的靜態節點),一切工作正常。
您的第一條路線「不匹配任何東西,總是被使用? – 2010-11-26 06:31:51
不,空url表示root .. – mare 2010-11-26 19:36:55