У меня есть область, которая зарегистрирована как:
public override void RegisterArea(AreaRegistrationContext context) {
context.MapRoute("CPanel_default",
"CPanel/{controller}/{action}/{id}/{*urlData}",
new { id = UrlParameter.Optional, urlData = UrlParameter.Optional });
}
Этот маршрут предназначен для полного количества URL-адресов:
- / cpanel / home / index
- / cpanel / entity / edit / 20
- / cpanel / entity / edit / 20 / abitrary-url-data
Отладчик маршрута Haack показал мне, что маршрутфункционируя в этом качестве.Тем не менее, мой код для создания ссылок действий недавно сломался, и я не смог выяснить причину прерывания.
Создаются ссылки действий со следующим кодом:
public static MvcHtmlString CpanelLink(this HtmlHelper @this, string linkText,
string actionName, string controllerName, string areaName = "CPanel") {
return @this.ActionLink(linkText,
actionName, new { controller = controllerName, area = areaName });
}
Который, насколько я могу судить, должен учитывать все обязательные поля в области маршрута.Отладка показывает, что CpanelLink возвращает <a href="">...</a>
, ссылку на ничто.
Редактировать
Дополнительное устранение неполадок обнаружило, что параметр маршрута {* urlData} убивает Html.CpanelLink.Сокращение маршрута до «CPanel / {controller} / {id}» устраняет проблему, но прерывает URL-адреса, которые зависят от параметра urlData.