2010-12-18 2 views
4

У меня возникла проблема с MVC-3, генерирующим исходящие маршруты для меня.Проблема с ViewBag и маршрутами (MVC 3 - RC2)

Это адрес страницы я на обоих сценариях: http://localhost:1283/Conflict/Create/1200/300

Вот карта маршрута:

routes.MapRoute(
    null, // Route name 
    "{controller}/{action}/{custId}/{projId}", // URL with parameters 
    null, // Parameter defaults 
    new { custId = @"\d+", projId = @"\d+" } 
); 

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

Сценарий 1:

От контроллера:

public ActionResult Create(int custId, int projId) 
{ 
    return View(); 
} 

От просмотра:

@Html.ActionLink("Back to List", "Index", "Conflict", new { custId = ViewBag.custId, projId = ViewBag.projId }, null) 

Полученная ссылка, которая создается.

http://localhost:1283/Conflict?custId=1200&projId=300

Если изменить код контроллера следующим образом:

public ActionResult Create(int custId, int projId) 
{ 
     ViewBag.custId = custId; 
     ViewBag.projId = projId; 

     return View(); 
} 

Я не делал каких-либо изменений в представлении, только добавили эти две строки в контроллер и следующую ссылку создается:

http://localhost:1283/Conflict/Index/1200/300

Что я здесь отсутствует? Это последовательное поведение, я смог воспроизвести это в других областях моего приложения. «Решение» очевидно, но почему мой вопрос?

+0

Я не могу воспроизвести это поведение на своей машине! странный – swapneel

+0

Метод действия индекса или создать? в вашем actionlink второй параметр - «Index»? –

ответ

2

Что происходит? «CustId = 1200 & projId = 300» часть вашей ссылки идет по ссылке, которую вы использовали для получения страницы, на которой вы находитесь. Поэтому вызов Html.ActionLink делает это:

  1. генерировать путь/Конфликт/Индекс
  2. взгляд на CustID и projíd в ViewBag и находит строку запроса вместо
  3. просто добавляет вашу строку запроса

Во втором случае вы фактически предоставляете значения, поэтому связь генерируется нормально. Надеюсь, это поможет.

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