Что такое ViewBag.Title
в ASP.NET MVC 4?
У меня есть этот файл вида:
@model IEnumerable<MvcMusicStore.Models.Genre>
@{
ViewBag.Title = "Store";
}
<h2>Index</h2>
и я не знаю, что может сделать изменение ViewBag.Title
.
Что такое ViewBag.Title
в ASP.NET MVC 4?
У меня есть этот файл вида:
@model IEnumerable<MvcMusicStore.Models.Genre>
@{
ViewBag.Title = "Store";
}
<h2>Index</h2>
и я не знаю, что может сделать изменение ViewBag.Title
.
На сайте ASP.NET:
ViewBag - это динамический объект, что означает, что вы можете поставить все, что хотите внутрь; объект ViewBag не имеет определенных свойств, пока вы не что-то внутри.
Свойство ViewBag.Title
- это просто строковый объект. В этом случае он используется в представлении, чтобы на самом деле определить свойство Title
. Если вы хотите посмотреть в своем _Layout.cshtml
файле, вы, вероятно, увидите что-то вроде:
<title>@ViewBag.Title</title>
Помните, когда свойство было определено в представлении? Когда страница окончательно отображается, это свойство заканчивается в разметке HTML, выглядящей как:
<title>Store</title>
Определяет название браузера.
ViewBag
- динамический объект, поэтому вы можете определить любое свойство на нем. В этом случае @ViewBag.Title
назначается строка. На странице _Layout.cshtml
вы увидите эту строку кода:
<title>@ViewBag.Title</title>
Любое представление, использующее _Layout.cshtml
в качестве макета, будет иметь строку кода, аналогичную приведенной ниже:
@{
// This is setting the property to Hahaha
ViewBag.Title = "Hahaha";
}
Если вы это сделали, это в конечном итоге то, что вы выполните (см. красный круг), показывающий название страницы в браузере:
В одном из ваших комментариев вы спрашиваете:
Делает ли что-то, что я хочу, значит, также ставить в него сложный объект? Я знаю, что это должно быть сделано путем передачи объекта модели, но это выполнимо?
Другими словами, вы спрашиваете, можете ли вы поместить сложный объект в свойство Title
? Да, вы можете это сделать, но имейте в виду изменить код в файле _Layout.cshtml
, иначе он просто вызовет ToString()
на ваш сложный объект и напечатает результат в заголовке браузера. Но зачем вам это делать? Я не предлагаю этого. Но да, вы можете положить что-нибудь в нем, потому что это динамично, но тогда вы должны использовать его правильно. Вы можете даже создать другие свойства следующим образом:
ViewBag.SomeOtherProperty = new MyClass() {...};
Однако, передача модели намного лучше, потому что она дает вам поддержку компилятора, и вы также получите интеллект.