Модель доступа из общего частичного представления независимо от контроллера - PullRequest
1 голос
/ 11 января 2012

Я создаю простую веб-страницу в asp.net mvc 3.

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

Как правильно получить доступ к модели данных из этого представления? Нужно ли передавать данные с каждого контроллера?

Мой файл частичного просмотра выглядит примерно так:

@model MvcApplication1.Models.CitationModel
@Model.Citation

Но это приводит к нулевой ссылке.

Модель похожа на

   public class CitationModel
{
    public string Citation{ get { return "Test"; } }
}

Ответы [ 3 ]

7 голосов
/ 11 января 2012

Я бы сделал это с дочерним действием. Таким образом, вы можете сохранять представление строго типизированным (без viewbag или viewdata), без необходимости помещать его в «главную» viewmodel, которая отправляется на ваш макет:

<div id="sidebar">
    @Html.Action("RandomCitations", "Citations")
</div>

В CitationsController:

[ChildActionOnly]
public PartialViewResult RandomCitations()
{
    var model = new CitationModel();
    // populate model
    return PartialView(model);
}

Ваш вид останется прежним, и будет вставлен в div боковой панели для каждого макета.

0 голосов
/ 11 января 2012

Я бы использовал базовый класс контроллера следующим образом:

public class ApplicationController : Controller
    {
        public ApplicationController()
        {
           Citation c = getYourCitation();

           ViewBag.Citation = c;
        }
}

Получите все ваши контроллеры для наследования от контроллера приложений

public class HomeController : ApplicationController
    {
       //Controller code
    }

Тогда будет отображаться каждое представление (включая _Layout)возможность доступа к ViewBag

в _Layout.cshtml сделать это:

@Html.Partial("_CitationPartial", (Your.MidTier.Models.Citation)ViewBag.Citation)
0 голосов
/ 11 января 2012

Существует множество сценариев. На данный момент для этих случаев я помещаю модель для просмотра сумки, а затем получаю ее из окна просмотра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...