ASP.NET MVC 3 маршрутизация в / Admin области с именем вместо идентификатора - PullRequest
1 голос
/ 05 сентября 2011

Этот бросил меня, поэтому я решила, что буду просить о помощи. У меня есть это, чтобы работать с моими маршрутами "Категории", но по какой-то причине, когда я пытаюсь сделать то же самое с "Потребителями", это не работает вообще. Вот необходимая справочная информация:

Маршрутизация (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 решила проблему для меня. Не знаю почему, но это так.

1 Ответ

1 голос
/ 05 сентября 2011

Ваши маршруты настроены правильно (я их проверял). Я подозреваю, что вы получаете это неправильное поведение, потому что представление, которое содержит вашу разметку @ Html.ActionLink (), находится за пределами вашей административной области. Если он находится внутри вашей административной области, вы должны увидеть правильную сгенерированную ссылку. Однако за пределами вашей административной области вам нужно объявить, на какую область вы нацеливаетесь, как это:

@Html.ActionLink(c.Alias, "Details", "Consumers", new { alias = c.Alias, area = "Admin" }, null)
...