我正在使用ASP.NET MVC3和ASP.NET MVC Sitemap Provider。
我有一个名为Application的控制器。我还有一个名为Administration的区域。在管理区域,我还有一个名为Application的控制器。
第一个应用程序控制器适用于普通网站用户。另一个应用程序控制器适用于管理员。
我希望我的网址显示为:
/Application/1001/Notes
/Administration/Application/1001/Notes
我对上述2个网址的路由注册是这样的:
Routes.MapRoute("ApplicationNote",
"{controller}/{applicationId}/Notes",
new { controller = "Application", action = "Notes" },
new { applicationId = @"\d+" },
new[] { "MyProject.Web.Controllers" });
Routes.MapRoute("AdminApplicationNote",
"{area}/{controller}/{applicationId}/Notes",
new { area = "Administration", controller = "Application", action = "Notes" },
new { applicationId = @"\d+" },
new[] { "MyProject.Web.Areas.Administration.Controllers" });
当我运行我的应用程序并转到应用程序控制器中的任何操作方法时,我在这里收到错误:
@Html.MvcSiteMap().SiteMapPath()
错误是:
Found multiple controllers:Application
以下是我的站点地图配置的部分视图:
<mvcSiteMapNode title="About" area="" controller="Home" action="About" />
<mvcSiteMapNode title="Applications" area="" controller="Application" action="Index" key="ApplicationIndex">
<mvcSiteMapNode title="Create Application" area="" controller="Application" action="Create" />
<mvcSiteMapNode title="Applications List" controller="Application" area="" action="List" />
</mvcSiteMapNode>
<mvcSiteMapNode title="Administration Dashboard" area="Administration" controller="Dashboard" action="Index">
<mvcSiteMapNode title="Users Dashboard" area="Administration" controller="User" action="List" />
</mvcSiteMapNode>
我该如何解决这个问题?如果我删除名为AdminApplicationNote的路由,则其他应用程序URL会正确显示。但是我可以让第二条区域路线按预期工作。
答案 0 :(得分:0)
什么版本的提供商?
一般来说,路线看起来不错。我之前遇到过这样的问题(在更复杂的情况下)和SiteMap使用的命名空间解析(它应该作为路由的名称空间,表明控制器是不同的)。
我建议您从github获取MvcSiteMapProvider.DefaultControllerTypeResolver的代码。认为它在第285行抛出与使用命名空间定位控制器有关的异常。使用source来实现你自己的版本(如果你已经使用它,当然可以直接进入他们的代码)然后使用你的版本断点并介入并确定它为什么声称它们是重复的。您需要在Web.config中注册您的实现。例如
之类的东西controllerTypeResolver="MyProject.Web.YourControllerTypeResolver, MyProject"
在创建多租户应用程序时,我必须这样做,租户有不同的控制器,我必须提供替代解决方案策略。
一般来说,你需要空区域(我从不这样做)。通常,您还需要在子节点等中指定控制器,就好像您不是,我确定它使用父节点。
---更新 -
我认为这可能是一个错误。看看https://github.com/maartenba/MvcSiteMapProvider/issues/78
应在3.3.4.0中修复