2010-02-04 2 views
1

У меня есть представление, что и редактирует, и создает «группы пользователей». И у меня есть "UserGroup-DetailsView" (Admin/UserGroup/43), где у меня есть 2 ссылки:Проблемы с RouteLink для того же действия

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

Но второй один делает как:

Admin? Длина = 24

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

/M

ответ

3

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

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

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

Кроме того, из кода я вижу, у вас есть имя контроллера UsergroupsAdmin..If ​​у вас есть где-то там также контроллер пользовательских групп, вам лучше избавиться от UsergroupsAdmin и просто украсить действия «admin» в контроллере Usergroups с помощью [Authorize action filter.

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

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

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

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

1

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

Я просто попытался это, помещая эти два вызова на мой взгляд 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

Почему вы проголосовали? Фил Хаак - менеджер продуктов, работающий над ASP.NET MVC. Серьезно, он мог бы что-то знать ... –

+0

Когда я меняю заказ ir renders ...../Admin/Edit, а затем/Admin/Edit? UsergroupID = 78 ... Наверное, это нужно будет сделать сейчас. Или есть другой способ это сделать? –

+0

@molgan, Как сказал Фил Хаак, проблема, скорее всего, происходит из-за другого маршрута, определенного перед маршрутами. –

0

Как выглядит ваш метод управления «Редактировать» (подпись метода)?

Вы используете int? datatype (nullable int)?

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

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

0

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

Смежные вопросы