Описание тега 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>
Ссылки