Передача информации обратно в представление при использовании перенаправления()
Я вызываю контроллер с нескольких страниц и использую параметр returnUrl
, чтобы вернуть правильное расположение вызова:
public ActionResult EmailOrder(int id, string returnUrl)
{
var message = "The order has been emailed";
if (!string.IsNullOrEmpty(returnUrl)) return Redirect(returnUrl);
return RedirectToAction("Details", new { id, message });
}
Как я могу передать дополнительную информацию обратно в представление при использовании Redirect(url)
? В приведенном выше примере я хочу иметь возможность передать message
обратно, когда returnUrl
имеет значение.
1 ответ:
Если вы перенаправляетесь на другой метод действия и хотите передать данные, которые могут быть доступны в новом методе действия, вы должны использовать ASP.Свойство TempData контроллера MVC. Вы используете это следующим образом:
[HttpPost] public ActionResult MyActionMethod(Order order) { // write your logic here to save the Order TempData["message"] = "here is some message"; return RedirectToAction("Index"); }
Данные в элементе TempData будут сохранены через перенаправление. Он будет доступен на перенаправленной странице, а затем будет удален. Как только вы прочтете запись в TempData, она будет помечена для удаления.
public ActionResult RedirectedMethod() { //Retrieve data from TempData. It will then be marked for deletion var data = TempData["message"].ToString(); }
Если вы хотите получить значение без пометив его на удаление, вы можете использовать метод "Peek":
var data = TempData.Peek("message")
Кроме того, вы можете вручную сохранить значение, которое в противном случае было бы удалено с помощью метода "Keep":
TempData.Keep("message")
TempData имеет типTempDataDictionary .
Обратите внимание, что TempData использует ASP.Net состояние сеанса за кулисами, поэтому вы должны иметь состояние сеанса включено, если вы используете TempData.
Для получения дополнительной информации о TempData см.здесь .