ASP.NET MVC Codeplex 사이트 맵 프로젝트를 사용자 정의 동적 노드 공급자와 함께 사용하려고합니다. 이것은 노드 공급자 코드입니다. DB에 액세스하기 위해 일부 저장소를 사용합니다. 실제로이 클래스에서는 DI를 사용하지 않지만 응용 프로그램은 NinjectHttpApplication을 상속받으며 Sitemap에는 컨트롤러를 획득하는 데 문제가 있습니다. Ninject 컨트롤러가있는 ASP.NET MVC 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() %>
내 기본 경로는 페이지/디스플레이/{슬러그}이고 슬러그 내가 사용
: "기본은"여기 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
);
입니다
값은 null 또는 비워 둘 수 없습니다. 매개 변수 이름 : controllerName
이것은 스택 추적입니다. 누군가가 무슨 일이 일어나는지 식별하는 데 도움이됩니다. 내가 아는 한 컨트롤러 용 Ninject로 이동하지만 컨트롤러를 얻지는 못한다.
[ArgumentException : 값을 null 또는 비워 둘 수 없습니다. 매개 변수 이름 : 컨트롤러 명]
System.Web.Mvc.DefaultControllerFactory.CreateController (RequestContext requestContext, 문자열 컨트롤러 명) 167 Ninject.Web.Mvc.NinjectControllerFactory.CreateController (RequestContext requestContext, 문자열 컨트롤러 명) 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() MvcSiteMapProvider.Web.Html.SiteMapPathHelper.SiteMapPath +56 +81
MvcSiteMapProvider.Web.Html을 (MvcSiteMapHtmlHelper 헬퍼 문자열 세퍼레이터 문자열 separatorCssClass 문자열 는 linkCssClass 부울 currentNodeAsLink, htmlAttributes 개체). SiteMapPathHelper.SiteMapPath (MvcSiteMapHtmlHelper 도우미) +30
ASP.views_site_master.__Render__control1 (HtmlTextWriter입니다 __w, 제어 parameterContainer) 499
어떤 도움에 감사드립니다.
또한 사용자 정의 노드 공급자 (.sitemap 파일의 정적 노드 만)가 없으면 모든 것이 올바르게 작동합니다.
첫 번째 경로는 무엇이든 일치하며 항상 사용되지 않습니까? –
아니요 빈 URL은 루트를 의미합니다. – mare