Я вижу, что есть Controller.RedirectToAction(string actionName, string controllerName, object values), но у меня так и не заработал параметр значения. Предположим, я хочу выполнить следующую перегрузку действий в контроллере:
public ActionResult Read()
{
return RedirectToAction("ReadPage", "MyController", 1);
}
public ActionResult ReadPage(int page)
{
// Doing the actual stuff
}
… Я получаю исключение, когда пытаюсь перейти к действию Read. То же самое и с Html.ActionLink.
Что с этим? Можете ли вы передавать значения в контроллеры, вообще не заходя в браузер в MVC?





Попробуйте использовать:
return RedirectToAction("ReadPage", "MyController", new {page = 1});
Ему необходимо знать, какой аргумент вы имеете в виду (как и в более общем случае, у вас может быть много параметров), что он может вывести из вышеизложенного.
Шаблон анонимного типа (см. Выше) очень удобен в ASP.NET MVC, хотя во многих случаях Я считаю, что вы также можете дать ему заполненный словарь, чтобы означать то же самое.
Также - в этом случае нет необходимости в двух действиях; вы можете настроить свои маршруты для предоставления значений по умолчанию; вот что я писал ранее:
public ActionResult Search(string query, int startIndex, int pageSize)
{
...
}
с маршрутами:
routes.MapRoute("Search", "Search/{query}/{startIndex}",
new {
controller = "Home", action = "Search",
startIndex = 0, pageSize = 20
});
Теперь, если я не указываю startIndex, он по умолчанию передает 0 в мой поиск. Таким образом, я могу перейти к «/ Foo» для поиска по умолчанию или «/ Foo / 100», чтобы выполнить тот же поиск, начиная с 100. В качестве альтернативы, аргументы могут быть в строке запроса и по-прежнему будут использоваться по умолчанию с использованием значений из анон-типа.
Обратите внимание на мое обновление о том, что здесь не нужны 2 метода ...