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

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

ViewData - это один из альтернативных способов передачи данных из контроллера в представление без использования модели.

Синтаксис

ViewData - это словарь, который устанавливается в контроллере и читается в представлении. Например:

Контроллер

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

Посмотреть

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

Результат

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

ViewData принимает в качестве ключей только строку, в противном случае будет сгенерировано предупреждение об ошибке. Таким образом, следующее невозможно:

ViewData[1] = "some text"; //cannot convert from 'int' to 'string'

Что касается стоимости, это полностью законно:

ViewData["Content"] = 1;            //prints 1
ViewData["Content"] = true;         //prints True
ViewData["Content"] = DateTime.Now; //prints the date (i.e. 4/16/2019 9:50:05 AM)

Если значение является объектом, вы должны привести ViewData в представлении, чтобы получить доступ к свойству для чтения:

Контроллер

public ActionResult ViewTest()
{
    ViewData["Content"] = new SomeClass
    {
        SomeProp = "some text"
    };
    return View();
}

Посмотреть

<div>
    @{
        var viewDataContent = (SomeClass) ViewData["Content"];
    }
    ViewData content: @viewDataContent.SomeProp
</div>

Поскольку вы должны привести объект, вы не можете использовать анонимный тип в качестве значения. Хотя обходной путь возможен, он не рекомендуется, поскольку приводит к некрасивому коду, который трудно поддерживать.

Жизнь

Срок действия ViewData - только для текущего запроса. После выполнения запроса срок действия ViewData истекает. Это означает, что если ViewData установлена ​​до перенаправления, срок ее действия истечет к тому времени, когда вы перейдете к представлению:

Контроллер

public ActionResult ViewRedirect()
{
    ViewData["Content"] = "some text";
    return RedirectToAction("ViewTest");
}

public ActionResult ViewTest()
{
    return View(); // ViewData["Content"] expires
}

Посмотреть

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

Результат

<div>
    ViewData content:
</div>

Ссылки