Подтвердить что ты не робот

Что такое ViewBag.Title в Razor?

Что такое ViewBag.Title в ASP.NET MVC 4?

У меня есть этот файл вида:

@model IEnumerable<MvcMusicStore.Models.Genre>

@{
    ViewBag.Title = "Store";
}

<h2>Index</h2>

и я не знаю, что может сделать изменение ViewBag.Title.

4b9b3361

Ответ 1

На сайте ASP.NET:

ViewBag - это динамический объект, что означает, что вы можете поставить все, что хотите внутрь; объект ViewBag не имеет определенных свойств, пока вы не что-то внутри.

Свойство ViewBag.Title - это просто строковый объект. В этом случае он используется в представлении, чтобы на самом деле определить свойство Title. Если вы хотите посмотреть в своем _Layout.cshtml файле, вы, вероятно, увидите что-то вроде:

<title>@ViewBag.Title</title>

Помните, когда свойство было определено в представлении? Когда страница окончательно отображается, это свойство заканчивается в разметке HTML, выглядящей как:

<title>Store</title>

Определяет название браузера.

Ответ 2

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() {...};

Однако, передача модели намного лучше, потому что она дает вам поддержку компилятора, и вы также получите интеллект.