RouteLink выдает то же действие - PullRequest
1 голос
/ 04 февраля 2010

У меня есть вид, что и редактирует, и создает "группы пользователей". И у меня есть «user-group-detailsview» (Admin / Usergroup / 43), где у меня есть 2 ссылки:

Html.RouteLink("Edit", "UsergroupEdit", 
    new { usergroupID = Model.Usergroup.UsergroupID })

Html.RouteLink("Create", "UsergroupCreate")

В моем global.asax я получил:

routes.MapRoute("UsergroupEdit", "Admin/Usergroup/Edit/{usergroupID}",
    new { controller = "UsergroupsAdmin", action = "Edit" } );

routes.MapRoute("UsergroupCreate", "Admin/Usergroup/Edit", 
    new { controller = "UsergroupsAdmin", action = "Edit" } );

Первый, где int передается в рендерах:

Администратор / UserGroup / Редактировать / 87

Но второй выводит как:

Администратор? Length = 24

Как я могу исправить этот маршрут?

/ M

Ответы [ 4 ]

3 голосов
/ 04 февраля 2010

Чтобы оставаться в здравом уме;) и сохранять ясность, используйте два пути:

routes.MapRoute(
    "UsergroupEdit",
    "Admin/Usergroup/Edit/{usergroupID}",
    new
    {
        controller = "UsergroupsAdmin", 
        action = "Edit"
    });

routes.MapRoute(
    "UsergroupCreate",
    "Admin/Usergroup/Create",
    new
    {
        controller = "UsergroupsAdmin",
        action = "Create"
    });

Также из кода, который я вижу, у вас есть имя контроллера UsergroupsAdmin..Если у вас где-то есть также контроллер Usergroups, вам лучше избавиться от UsergroupsAdmin и просто декорировать действия "admin" в контроллере Usergroups с помощью [Авторизовать фильтр действий.

Для Авторизации вы можете реализовать свой собственный поставщик ролей, чтобы вы могли проверить свои требования там. Это будет держать вещи очень чистыми и ремонтопригодными.

Если вы решили сохранить маршрут редактирования, просто убедитесь, что у вас есть только один такой:

routes.MapRoute(
    "UsergroupEdit",
    "Admin/Usergroup/Edit/{usergroupID}",
    new
    {  
        controller = "UsergroupsAdmin",  
        action = Edit",
        usergroupID = 0
    });

и отметьте в действии контроллера, где usergroupID = 0, просмотрите представление представления.

1 голос
/ 12 февраля 2010

То, что у вас есть, должно работать просто отлично. Возможно, у вас есть опечатка где-то?

Я только что попробовал это, поместив эти два вызова в мое представление Index.aspx в HomeController, и я получил следующий вывод:

<a href="/Admin/Usergroup/Edit/123">Edit</a> 
<a href="/Admin/Usergroup/Edit">Create</a>

Вот мой метод RegisterRoutes.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");


    routes.MapRoute("UsergroupEdit", "Admin/Usergroup/Edit/{usergroupID}",
        new { controller = "UsergroupsAdmin", action = "Edit" });

    routes.MapRoute("UsergroupCreate", "Admin/Usergroup/Edit",
        new { controller = "UsergroupsAdmin", action = "Edit" });

    routes.MapRoute(
        "Default",                                              // Route name
        "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
    );

}

Скорее всего, у вас возникла проблема с другим маршрутом, определенным до этих маршрутов.

0 голосов
/ 16 февраля 2010

Изменен порядок, хотя он не был полностью исправлен, просто заставил его работать

0 голосов
/ 15 февраля 2010

Как выглядит ваш метод контроллера "Edit" (сигнатура метода)?

Вы используете int? тип данных (обнуляемый int)?

Я обычно получаю целое? Длина = 24, когда пытаюсь сопоставить действие и как-то испортил параметры.

Вам также следует рассмотреть рекомендацию @ Haacked о переупорядочении маршрутов в вашем глобальном коде. Я не знаю, кто голосовал против этого парня, но он много знает о ASP.NET MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...