Передача информации обратно в представление при использовании перенаправления()


Я вызываю контроллер с нескольких страниц и использую параметр 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 2

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 см.здесь .