Как указано в заголовке, URL-адрес одного из узлов в пакете не соответствует правилу. Я просто получаю http://localhost/#URL-адрес узла MvcSiteMapProvider, отображаемый как/#
Очевидно, что у меня что-то не так. У меня есть другие, похожие структуры в файле Sitemap, которые работают. Можете ли вы сказать, что это пропало?
При необходимости я могу разместить дополнительную информацию.
SiteMap:
<mvcSiteMapNode title="ISP" controller="xxx" action="Index">
<mvcSiteMapNode title="PC" action="Details" preservedRouteParameters="pcId">
<mvcSiteMapNode title="SGD" controller="yyy" action="Details" preservedRouteParameters="pcId, yyyId, editable">
<mvcSiteMapNode title="ESGN" controller="yyy" action="Title" preservedRouteParameters="pcId, yyyId, editable" />
</mvcSiteMapNode>
Действия:
[HttpGet]
[Route("xxx/{pcId:int}/yyy/{yyyId:int}/Details/{editable:bool}")]
public virtual ActionResult Details(int pcId, int yyyId, bool editable)
{
[HttpGet]
[Route("xxx/{pcId:int}/yyy/{yyyId:int}/Title")]
public virtual ActionResult Title(int pcId, int yyyId)
{
Карта маршрута:
routes.MapRoute(
name: "xxx",
url: "xxx/{action}/{pcId}",
defaults: new
{
controller = "xxx",
action = "Index",
pcId = UrlParameter.Optional
}
);
Update: При удалении "редактируемого" параметр он начал работать. Может быть проблема с более чем двумя параметрами? или, возможно, тип или имя параметра?
Update следующие советы отладки от NightOwl88:
urlHelper делает генерировать правильный URL,
Это мой код контроллера:
[HttpGet]
[Route("TransactionDetails/File/{fileId:int}")]
public virtual ActionResult Index(int fileId)
{
{
var urlHelper = new UrlHelper(new System.Web.Routing.RequestContext(this.HttpContext, this.RouteData));
var url = urlHelper.Action("Index", "Transaction",
new System.Web.Routing.RouteValueDictionary { { "id", 678 } });
System.Diagnostics.Debug.WriteLine(url);
}
{
var urlHelper = new UrlHelper(new System.Web.Routing.RequestContext(this.HttpContext, this.RouteData));
var url = urlHelper.Action("Index", "File",
new System.Web.Routing.RouteValueDictionary {{"fileId", 123}});
System.Diagnostics.Debug.WriteLine(url);
}
я получаю: /AdministratorConsole/TransactionDetails/678 и /AdministratorConsole/TransactionDetails/File/123
Итак, помощник может создать для меня URL-адрес, но MvcSiteMapProvider все еще не доволен.
SiteMap является:
<mvcSiteMapNode title="Transaction Log" controller="TransactionLog" action="Index">
<mvcSiteMapNode title="Transaction Details" controller="Transaction" action="Index" preservedRouteParameters="id">
<mvcSiteMapNode title="File Details" controller="File" action="Index" preservedRouteParameters="id, fileId"> <!--TODO link back to parent not working-->
Спасибо, что попробовали. Интересно, что узел, у которого есть проблема, получает хороший Url, когда его последний узел в списке, но не тот, когда он второй. –
Я обновил свой вопрос. UrlHelper генерирует URL-адрес для меня, но MvcSiteMapProvider - нет. Что-нибудь еще я могу попробовать? –