2016-07-11 3 views
0

Мне нужно установить свойство ViewBag на частичном изображении и вызвать в поле зрения. Вот мой код: Это index.cshtml:ASP MVC - ViewBag от частичного просмотра

<h2>@ViewBag.Title</h2> 
Html.RenderPartial("~/Views/Article/Partial.cshtml"); 

И этот контроллер:

public ActionResult Index(int id) 
{ 
    return View(_db.Articles.Find(id)); 
} 

Это Partial.cshtml:

@model Article 
@{ 
    ViewBag.Title = Model.Article.Title; 
} 

<h2>....</h2> 
//html... 
+0

Не могли бы вы показать весь ваш index.cshtml? где вы также выполняете частичное, а также действие контроллера для «Index()»? – mtaanquist

ответ

3

на основе кода, представленной выше, вы, кажется, задайте ViewBag.Title в частичном представлении и попытайтесь использовать его в представлении «Индекс». Это не сработает. Вам также кажется, что вы хотите написать заголовок статьи, который в частичном случае не изменит название страницы.

Вы должны рассмотреть, где вы хотите установить Title; либо в действии контроллера, либо в основном представлении. Вот пример:

Контроллер

public ActionResult Index(int id) 
{ 
    ViewBag.Title = "My Title"; 
    return View(_db.Articles.Find(id)); 
} 

Измените файл Index.cshtml:

Index.cshtml

@model Article 

<h2>@ViewBag.Title</h2> 
@Html.Partial("_Partial", Model) 

А затем обновить частичное. Обратите внимание, что движок Razor достаточно умен, чтобы определить, какой файл cshtml использовать, поэтому вам не нужно указывать полный путь. Общее соглашение об именах заключается в том, чтобы начинать частичное с подчеркиванием.

_Partial.cshtml

@model Article 

<h2>@Model.Title</h2> 
... 

Я не знаю, как ваша модель настроена, так что вы можете изменить это. Вы также должны учитывать, почему вы предпочитаете использовать частичный, а не просто встраивать все в индексный файл.

Если идея состоит в том, что на странице должна отображаться отдельная статья (которая, по-видимому, подразумевает запрос Linq), вы можете просто создать ее на одном представлении. Вот пример:

Предлагаемые Index.cshtml

@{ 
    ViewBag.Title = Model.Title; 
} 

@model Article 

<h2>@Model.Title</h2> 
<p>@Model.Content<p> 

Это всего лишь пример, конечно же, и вы должны применить форматирование, как вы хотите. Это приведет к тому, что заголовок страницы (в браузере) будет указывать на «Название сайта - Заголовок статьи» и покажет заголовок в элементе h2.

+0

У меня есть мастер, и каждый шаг является частичным.Я хочу изменить заголовок ViewBag на основе того шага, на котором я нахожусь без перезагрузки всей страницы, когда шаг + частичный я нахожусь на изменениях. –

+0

Привет @AlanBall, вероятно, лучше открыть новый вопрос для этого, так что вы можете укажите примеры того, что вы пытаетесь сделать. – mtaanquist

0

То, как вы вызываете частичный вид, неверно. Ваше частичное представление предполагает модель статьи. Измените свой вызов на частичный вид, как это Html.Partial("Partial", Model) - Модель здесь - это модель, доступная в Index.cshtml (которая является статьей, которую вы передали из вашего метода действия индекса в вашем контроллере.