@anlamas

Как передать данные для строго типизированного частичного представления или для _Layout.cshtml?

Здравствуйте! На сайте для навигации я использую строго типизированное частичное представление(навигация рендерится всех страницах). Использую мастер-страницы.
_Layout.cshtml
<body>
@{Html.RenderPartial("_Navigation");}
@RenderBody()
<body/>


_Navigation.cshtml
@model IEnumerable<ProgramManager.Models.Category>
<div class="list">
    @foreach (var item in Model) {
         <div class="list-item">
              @Html.ActionLink(item.Name, "Item", "Category", new { id = item.Id})
         </div>
    }
</div>


Вот, теперь как(откуда?) передать данные в _Navigation.cshtml? Учитывая то, что навигация на всех страницах сайта появляется. Или можно ли как то передать для _Layout.cshtml? тогда получится глобально
  • Вопрос задан
  • 4103 просмотра
Решения вопроса 1
Valeriy1991
@Valeriy1991
Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
Добрый день!
Используя
@{Html.RenderPartial("_Navigation");}
Вы просто отображаете представление.

Чтобы передать модель в представление, нужно эту модель сформировать. Модель лучше сформировать в методе действия, например, так:
[HttpGet]
public ActionResult Navigation()
{
	List<MyClass> classes = new List<MyClass>();
	classes.Add(new MyClass() { Id = 1, Name = "item 1" });
	classes.Add(new MyClass() { Id = 2, Name = "item 2" });
	classes.Add(new MyClass() { Id = 3, Name = "item 3" });
	
	return View("_Navigation", classes);
}


Теперь Вам нужно заменить
@{Html.RenderPartial("_Navigation");}
на это:
@{Html.RenderAction("Navigation", "YourController");}


RenderPartial просто рендерит представление, а RenderAction грубо говоря, "запрашивает представление у метода действия".

Второй Ваш вопрос
Или можно ли как то передать для _Layout.cshtml? тогда получится глобально
не понял.

Надеюсь, помог Вам чем-нибудь.
Успехов!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы