2011-12-15 3 views
0

Я работаю над приложением ASP.NET MVC 3, но я довольно новичок в MVC в целом.ASP.NET MVC 3 - передавать данные в частичный вид в макете

У меня есть частичный вид в представлении макета приложения, которому необходимо передать данные. это будет отображаться на каждой странице. Есть ли способ сделать это, поэтому мне не нужно загружать эти данные в модель представления для каждого действия на всем сайте?

Как и в случае, если пользователь переходит к настройкам Mysite/admin /, я хотел бы, чтобы частичный вид на макете мог каким-то образом получать данные, которые ему нужны, без необходимости вставлять этот код в действие «Настройки» в контроллере администратора.

В этом же примечании, как вы передаете данные в макет приложения?

+0

Возможный дубликат [Как передать данные в PartialView в моем макете?] (Http://stackoverflow.com/questions/7607950/how-to-pass-data-to-a-partialview-in-my- макет) – jrummell

ответ

1

В таких ситуациях я обычно использую базовый ViewModel для моих Просмотров

public class ApplicationViewModel 
{ 
    public string UserName {get; set;} 
    .... 
} 

public class SettingsViewModel : ApplicationViewModel 
{ 
} 

всех ваших взглядов будет наследоваться от этого ViewModel. Ваш макет будет ожидать его, а

_layout.cshtml:

@model ApplicationViewModel 
.... 

<h1>hello @Model.UserName</h1> 

надеюсь, что это ответ на ваш вопрос

+0

Извините - этот пост http://stackoverflow.com/questions/4154407/asp-net-mvc-razor-pass-model-to-layout кричит, что присвоение модели базовому виду - плохая идея. Как и более опытный коллега.Downvoting –

+2

@CrabBucket Это добавляет ограничение, вам нужно наследовать «ApplicationViewModel» для всех представлений, которые используют один и тот же макет. Если это ограничение, с которым вы не можете жить, это не решение, которое вы можете использовать, просто. Мы делаем компромиссы все время. Как опытный программист, вам нужно знать, когда оценивать каждую ситуацию и решать, что работает, а что нет. Вы живете, и вы учитесь :) –

1

Частичный только визуализирует вид. Вам необходимо предоставить модель вручную.

Вы можете создать мероприятие для просмотра, которое хотите, и сделать его с помощью Html.Action(actionName).


сделать действие, например menu, который будет создавать модель, которая будет предоставлена ​​в menu зрения.

Теперь вы можете позвонить @Html.Action("menu") откуда угодно, и он будет предоставлен автономно. (вы можете конечно указать имя контроллера, а также, и даже пользовательские routeData)

Вы также можете установить Layout = null; в целях, чтобы избежать использования мастер-макет сайта в целом.

+0

Не могли бы вы рассказать об этом. Похоже, что это хорошее решение, но мне не хватает, чтобы продолжить работу с вашего поста. Не могли бы вы поделиться некоторыми примерами или, возможно, ссылкой на примеры? Благодарю. – jdavis

0

Это, как я передать значение частичного вида с моей страницы макета:

Компоновка кодовой страницы:

Html.RenderPartial("_SubMenuLeft", new ViewDataDictionary { {"category", "MMG"} }); 

и в моем _SubMenuLeft.cshtml (частичный просмотр)

@if (ViewData["category"] == "MMG") 
{ 
    ... 
} 

Надеюсь, что это поможет кому-то в будущем.

Смежные вопросы