J'essaie d'utiliser le projet Sitemap ASP.NET MVC Codeplex avec le fournisseur de nœud dynamique personnalisé. C'est mon code de fournisseur de noeud. Il utilise un référentiel pour accéder à la base de données. En fait, je n'utilise pas DI dans cette classe, mais l'application hérite de NinjectHttpApplication et le Sitemap a des problèmes pour acquérir le contrôleur.ASP.NET MVC SiteMap avec une erreur d'usine du contrôleur 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;
}
}
Puis, en Site.master j'essaie de rendre la mie de pain comme ceci:
<%=Html.MvcSiteMap().SiteMapPath() %>
Ma route par défaut qui commence lors de l'exécution du site est la page/Affichage/{} limaces et limaces j'utiliser le « défaut », voici la Global.asax.cs partie
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
);
le problème que j'ai est que lorsque le fournisseur de nœud personnalisé du site est en place, je reçois cette erreur lors de l'exécution:
La valeur ne peut pas être nulle ou vide. Nom du paramètre: controllerName
Ceci est la trace de la pile (peut-être que cela aidera quelqu'un à identifier ce qui se passe). Pour autant que je sache, il va à Ninject pour le contrôleur mais n'en a pas.
[ArgumentException: La valeur ne peut pas être null ou vide. Nom du paramètre: ControllerName]
System.Web.Mvc.DefaultControllerFactory.CreateController (RequestContext RequestContext, String ControllerName) +167 Ninject.Web.Mvc.NinjectControllerFactory.CreateController (RequestContext RequestContext, String ControllerName) +151 MvcSiteMapProvider. AuthorizeAttributeAclModule.IsAccessibleToUser (IControllerTypeResolver controllerTypeResolver, fournisseur de DefaultSiteMapProvider, HttpContext contexte, noeud SiteMapNode) MvcSiteMapProvider.DefaultAclModule.IsAccessibleToUser 533 (IControllerTypeResolver controllerTypeResolver, DefaultSiteMapProvider provi der, HttpContext contexte, le noeud SiteMapNode) 149 MvcSiteMapProvider.DefaultSiteMapProvider.IsAccessibleToUser (HttpContext contexte, le noeud SiteMapNode) 24
System.Web.SiteMapNode.IsAccessibleToUser (HttpContext contexte) 17
System.Web.SiteMapProvider .ReturnNodeIfAccessible (nœud SiteMapNode ) 42
de System.Web.StaticSiteMapProvider.FindSiteMapNode (String rawUrl) 176
MvcSiteMapProvider.DefaultSiteMapProvider.FindSiteMapNode (HttpContext contexte) 282
System.Web.SiteMapProvider .get_CurrentNode() 56 MvcSiteMapProvider.Web.Html.SiteMapPathHelper.SiteMapPath (helper MvcSiteMapHtmlHelper , le séparateur String, String separatorCssClass, String linkCssClass, Boolean currentNodeAsLink, Objet htmlAttributes) 81
MvcSiteMapProvider.Web.Html. SiteMapPathHelper.SiteMapPath (MvcSiteMapHtmlHelper helper) +30
ASP.views_site_master.__Render__control1 (HtmlTextWriter __W, contrôle parameterContainer) +499
Toute aide appréciée.
Veuillez également noter que sans le fournisseur de noeud personnalisé (uniquement les noeuds statiques dans le fichier .sitemap) tout fonctionne correctement.
Votre première ligne "" ne correspondra-t-elle à rien et sera-t-elle toujours utilisée? –
non, l'URL vide signifie la racine. – mare