Этот бросил меня, поэтому я решила, что буду просить о помощи. У меня есть это, чтобы работать с моими маршрутами "Категории", но по какой-то причине, когда я пытаюсь сделать то же самое с "Потребителями", это не работает вообще. Вот необходимая справочная информация:
Маршрутизация (AdminAreaRegistration.cs):
public override void RegisterArea(AreaRegistrationContext context)
{
//matches /Admin/BusinessCategories/MyCategory/children
context.MapRoute(
"ChildCategories",
"Admin/BusinessCategories/{category}/children",
new { controller = "BusinessCategories", action = "ViewChildren" }
);
//matches /Admin/BusinessCategories/MyCategory/edit
context.MapRoute(
"EditCategory",
"Admin/BusinessCategories/{category}/edit",
new { controller = "BusinessCategories", action = "Edit" }
);
// want this to match /Admin/Consumers/JoeBob/details
context.MapRoute(
"ConsumerDetails",
"Admin/Consumers/{alias}/details",
new { controller = "Consumers", action = "Details" }
);
//matches /Admin
//matches /Admin/BusinessCategories
//matches /Admin/BusinessCategories/New
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "AdminHome", action = "Index", id = UrlParameter.Optional },
new { id = @"\d+" }
);
}
Тогда в моем контроллере Потребителей (ConsumersController.cs):
public class ConsumersController : Controller
{
public ActionResult Index()
{
...code...
}
[HttpGet]
public ActionResult Details(string alias)
{
return View(alias);
}
}
Тогда я создаю свою ссылку следующим образом:
@Html.ActionLink(c.Alias, "Details", "Consumers", new { alias = c.Alias }, null)
Проблема в том, что мой вызов @ Html.ActionLink генерирует ссылку вроде:
/Admin/Consumers/details?alias=JoeBob
(что приводит к 404, если нажать)
а не то, что я хочу, а именно:
/Admin/Consumers/JoeBob/details
Одна вещь, которую я заметил, это то, что если я изменю alias = c.Alias
на id = c.Alias
, то получится такой URL:
/Admin/Consumers/details/JoeBob
(поэтому он удаляет часть псевдонима из строки запроса, но по-прежнему помещает «детали» перед псевдонимом.)
Есть идеи?
Редактировать : Перезагрузка IIS решила проблему для меня. Не знаю почему, но это так.