ASP.NET MVC3 Вложенные ресурсы в области - PullRequest
2 голосов
/ 06 октября 2011

Я родом из Rails, и у меня возникли проблемы, когда я оборачиваюсь вокруг фреймворка Microsoft MVC.

Сегодня это маршрутизация. Rails предоставляет вам пространства имен (например, Admin), которые эквивалентны областям в .NET MVC3. Rails также позволяет вам определять вложенные ресурсы в ваших маршрутах, которые будут давать вам, например, / posts / 1 / comments / 1 / edit, и в ваших действиях вы в основном получаете params [: post_id] и params [: id].

Мне нужно что-то подобное в ASP.NET MVC3, но я не знаю, как это сделать. Поиск в Google приводит как минимум к 30 различным способам достижения этой цели, и ни одна из них не затрагивает области.

Такое ощущение, что я должен что-то добавить / изменить здесь:

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }

Но не уверен, где. Есть предложения?

1 Ответ

2 голосов
/ 07 октября 2011

Я думаю, что вы находитесь в правильном файле (ваш файл AreaRegistration.cs). Я предпочитаю быть немного более явным с моими маршрутами, а не использовать тип маршрута «поймать все» по умолчанию, который они предоставляют. Вот пример того, как я справлюсь с этим:

Добавьте что-то подобное перед существующим маршрутом (или избавьтесь от существующего вместе) в методе RegisterArea

context.MapRoute(
    "Edit_Comment",
    "posts/{postId}/comments/{commentId}/edit",
    new { controller = "Comment", action = "Edit" }
);

Тогда в вашем CommentController.cs вы должны выполнить следующее действие:

public ActionResult Edit(int postId, int commentId)
{
    // Do your edit logic then return an ActionResult
}
...