ActionResult вернется на страницу, которая называется

У меня есть ActionLink, который вызывает мой общедоступный ActionResult, и я бы хотел, чтобы он вернулся на страницу, из которой он был вызван, но как?

Ответ 1

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

Самый простой - это...

return Redirect(HttpContext.Request.UrlReferrer.AbsoluteUri);

AbsoluteUri может не дать вам точный путь, который вы ищете, но UrlReferrer должен иметь требуемую имформацию. Redirect возвращает подкласс ActionResult, поэтому он является допустимым возвращаемым значением.

Другая идея состоит в том, чтобы основать местоположение перенаправления на сохраненные значения. Это полезно, когда вы собираетесь делать несколько запросов до того, как хотите перенаправить, например, когда вы проверяете форму и показываете проблемы проверки в первом ответе. Другая ситуация будет, когда реферер не является локальным сайтом. В любом случае ваш реферер не будет тем, что вы хотите, и вам нужно будет найти правильное местоположение из другого места.

Конкретные реализации включают использование скрытого поля ввода в вашей форме, состояние сеанса, вытягивание значения дискриминатора из ваших данных маршрута или даже просто более постоянное значение, например HttpContext.Request.ApplicationPath.

Удачи.

Ответ 2

Имейте в виду, что из-за отсутствия состояния в Интернете ваш ActionResult не "вызывается" из вашего ActionLink, а просто URL-адрес, который запросил пользовательский агент.

Из-за этого единственный реальный "встроенный" способ, которым вы можете знать, откуда пришел этот пользователь, - проверить заголовки HTTP-запроса, чтобы увидеть, что указала эта страница:

string referrer = Request.Headers["referer"];

Затем вы будете отвечать за разбор метода Action из этого URL-адреса, если вы собираетесь называть его напрямую. Имейте в виду, что этот реферер не может быть ссылкой на вашем собственном сайте.