Передача информации обратно в представление при использовании Redirect()
Я звоню в контроллер с более чем одной страницы и использую 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 ответ
Если вы перенаправляете на другой метод действия и хотите передать данные, к которым можно получить доступ, в новом методе действия, вам следует использовать свойство TempData контроллера ASP.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, смотрите здесь.