Описание тега tempdata

TempData - это словарь, используемый в C# MVC для передачи данных между разными контроллерами или различными действиями. Эта функция была впервые представлена ​​в MVC 1.0. Чтобы использовать этот тег, публикация должна использовать C#, MVC и должна относиться к использованию TempData.

TempData внутренне использует сеанс для хранения своих данных, но, в отличие от переменных сеанса, TempData очищает себя.

Сходства с ViewData

TempData имеет некоторое сходство с ViewData. Оба они являются словарями, которые используют строки в качестве ключей и могут хранить примитивы или объекты для значения. Live ViewData, его можно использовать в качестве альтернативы модели для передачи данных от контроллера в представление.

Контроллер

public ActionResult TempTest()
{
    TempData["ContentString"] = "some text";
    TempData["ContentInt"] = 1;
    TempData["ContentBool"] = true;
    TempData["ContentDate"] = DateTime.Now;
    TempData["ContentObj"] = new SomeClass
    {
        SomeProp = "some text"
    };
    return View();
}

Посмотреть

<div>
    TempData content string: @TempData["ContentString"]
</div>
<div>
    TempData content integer: @TempData["ContentInt"]
</div>
<div>
    TempData content boolean: @TempData["ContentBool"]
</div>
<div>
    TempData content date: @TempData["ContentDate"]
</div>
@{
    var tempDataContent = (SomeClass) TempData["ContentObj"];
}
<div>
    TempData content object: @tempDataContent.SomeProp
</div>

Результат

<div>
    TempData content string: some text
</div>
<div>
    TempData content integer: 1
</div>
<div>
    TempData content boolean: True
</div>
<div>
    TempData content date: 4/16/2019 9:50:05 AM
</div>
<div>
    TempData content object: some text
</div>

Отличия от ViewData

TempData хранит свои данные в течение всего HTTP-запроса. Это означает, что, в отличие от ViewData, данные в TempData не будут очищены после перенаправления.

Контроллер

    public ActionResult TempTest1()
    {
        TempData["Content"] = "some text";
        ViewData["Content"] = "some text";
        return RedirectToAction("TempTest");
    }

    public ActionResult TempTest()
    {
        return View();
    }

Посмотреть

<div>
    TempData content: @TempData["Content"]
</div>
<div>
    ViewData content: @ViewData["Content"]      
</div>

Результат

<div>
    TempData content: some text
</div>
<div>
    ViewData content:       
</div>

Как только HTTP-запрос выполнен, TempData блокируется, поэтому следующий сделанный HTTP-запрос вернет только значение NULL для TempData.

Контроллер

    public ActionResult TempTest()
    {
        TempData["Content"] = "some text";
        return View();
    }

    public ActionResult TempLifeTest()
    {
        return View();
    }

Просмотр - TempTest.cshtml

    <div>
        TempData content: @TempData["Content"]
    </div>

Просмотр - TempLifeTest.cshtml

    <div>
        TempData content: @TempData["Content"]
    </div>

Результат - TempTest.cshtml

    <div>
        TempData content: some text
    </div>

Результат - TempLifeTest.cshtml

    <div>
        TempData content: 
    </div>

Чтобы TempData сохранила свои значения для последующего запроса, используйте TempData.Keep()

Контроллер

    public ActionResult TempTest()
    {
        TempData["Content"] = "some text";
        TempData.Keep();
        return View();
    }

    public ActionResult TempLifeTest()
    {
        return View();
    }

Просмотр - TempTest.cshtml

    <div>
        TempData content: @TempData["Content"]
    </div>

Просмотр - TempLifeTest.cshtml

    <div>
        TempData content: @TempData["Content"]
    </div>

Результат - TempTest.cshtml

    <div>
        TempData content: some text
    </div>

Результат - TempLifeTest.cshtml

    <div>
        TempData content: some text
    </div>

Вы можете продолжать вызывать TempData.Keep() столько, сколько хотите, чтобы данные сохранялись для каждого последующего запроса.

Ссылки