RedirectToAction перенаправляет с параметрами запроса? - PullRequest
5 голосов
/ 11 сентября 2011

Я работаю над приложением ASP.NET MVC и столкнулся со странной вещью.

Я получил два действия контроллера, как это:

[CustomAuthorize(Roles = SiteRoles.Admin)]
public ActionResult Review(int? id)

[CustomAuthorize(Roles = SiteRoles.Admin)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Review(AdReview data)

Сначала я вызываю Review действие с нулевым параметром, при этом открывается веб-страница со списком элементов.Элементы связаны с первым действием обзора с установленным идентификатором.

Когда идентификатор будет предоставлен действию обзора, будет возвращена веб-страница редактирования для этого элемента.При нажатии на кнопку отправить после некоторых изменений мы окажемся во втором действии «Просмотр» (публикация).Здесь элемент будет сохранен.

Пока все отлично.

Теперь, в последнем действии (сообщении) о проверке я получил в конце следующий код:

return RedirectToAction("Review", "Ad");

Это снова вызовет первое действие Review, проблема в том, что он предоставит предыдущий идентификатор?Я думал, что RedirectToAction не будет предоставлять никаких параметров?

1 Ответ

5 голосов
/ 12 сентября 2011

Я думал, что RedirectToAction не будет предоставлять никаких параметров?

Ваше понимание неверно.Параметры, присутствующие в состоянии модели, автоматически пересылаются, если целевой URL содержит параметр маршрута с тем же именем.В этом случае у вас есть параметр id, который публикуется (возможно, как часть поля ввода или части URL-адреса) и когда вы перенаправляете обратно к исходному действию Index, потому что ваши определения маршрута имеют маркер id вконец RedirectToAction метод заполнит его.

В качестве обходного пути, чтобы избежать такого поведения, вы могли бы явно указать, что параметр id не следует отправлять при перенаправлении:

return RedirectToAction("Index", "Ad", new { id = "" });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...