Здесь ViewData и ViewBag оба используются для передачи данных из Контроллер в Просмотр .
1.ViewData
- ViewData - объект словаря, производный от ViewDataDictonary class.
- Данные допускают только один запрос, значения ViewData очищаются, когда страницапроисходит перенаправление.
- перед использованием необходимо ввести значение ViewData cate.
Пример: В контроллере
public ActionResult PassingDatatoViewWithViewData()
{
ViewData["Message"] = "This message shown in view with the ViewData";
return View();
}
В представлении
@ViewData["Message"];
- с ViewData это пара типа ключ и значение , сообщение является ключом и в кавычках значение равно.
- данныепрост, поэтому мы не можем использовать здесь приведение типов, если данные сложны, тогда используется приведение типов.
public ActionResult PassingDatatoViewWithViewData()
{
var type= new List<string>
{
"MVC",
"MVP",
"MVVC"
};
ViewData["types"] = type;
return View();
}
- данные в представлении можно извлечь как
<ul>
@foreach (var items in (List<string>)ViewData["types"])
{
<li>@items</li>
}
</ul>
2.ViewBag
- ViewBag использует динамическую особенность. Оболочка ViewBag вокруг ViewData.
- В ViewBag требуется приведение типа.
- То же, что и ViewData, если происходит перенаправление, значение становится нулевым.
Пример:
public ActionResult PassingDatatoViewWithViewBag()
{
ViewData.Message = "This message shown in view with the ViewBag";
return View();
}
В представлении
@ViewBag.vbMessage
- Для сложного типа используйте ViewBag
public ActionResult PassingDatatoViewWithViewBag()
{
var type= new List<string>
{
"MVC",
"MVP",
"MVVC"
};
ViewBag.types = type;
return View();
}
- In View данные могут быть извлечены как
<ul>
@foreach (var items in ViewBag.types)
{
<li>@items</li>
}
</ul>
- основное отличие состоит в том, что ViewBag не требуется типизация, но ViewData требуется типографское оформление.