Проблема с ViewBag и маршрутами (MVC 3 - RC2) - PullRequest
4 голосов
/ 18 декабря 2010

У меня проблема с MVC-3, создающим для меня исходящие маршруты.

Это адрес страницы, на которой я работаю, для обоих сценариев: 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

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

1 Ответ

2 голосов
/ 21 марта 2011

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

  1. генерирует путь / Conflict / Index
  2. ищет custId и projId в ViewBag и вместо этого находит строку запроса
  3. просто добавляет строку запроса

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

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