Asp.Net Mvc - Как иметь «контроллер» в общем представлении - PullRequest
37 голосов
/ 09 мая 2011

У меня есть общий вид в моем _Layout.cshtml для моего заголовка с именем "_Header.cshtml".

Я хотел бы отображать текст и изображение из базы данных, поэтому мне нужен мой контроллер, чтобы перейти вбазы данных и вернуть его в _Header.cshtml.

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

Вот _Layout.cshtml

    <div id="header">
        <div id="title">
            @Html.Partial("_Header")
        </div>

        <div id="logindisplay">
           @Html.Partial("_CultureChooser")
            <br />
           @Html.Partial("_LogOnPartial")
        </div>

        <div id="menucontainer">
           @Html.Partial( "_MenuPartial")
        </div>
    </div>

    <div id="main">
        @RenderBody()
        <div id="footer">
        </div>
    </div>

</div>

Ответы [ 5 ]

56 голосов
/ 09 мая 2011

В вашем действии контроллера вы можете указать имя представления:

public class MenuController : Controller
{
    [ChildActionOnly]
    public ActionResult Header()
    {
        var model = ... // go to the database and fetch a model
        return View("~/Views/Shared/_Header.cshtml", model);
    }
}

Теперь в вашем _Layout.cshtml вместо @Html.Partial("_Header") сделайте следующее:

@Html.Action("Header", "Menu")
9 голосов
/ 11 мая 2012

... 1 год спустя просто хотел бы добавить одну вещь к ответу Димитрова.Вы можете сделать контроллер немного чище:

public class MenuController : Controller
{
    [ChildActionOnly]
    public ActionResult Header()
    {
        var model = ... // go to the database and fetch a model
        return Partial("_Header", model);
    }
}
2 голосов
/ 09 мая 2011

Создайте действие в одном из ваших контроллеров для отображения представления заголовка, затем просто вызовите @ Html.RenderAction ("Header") в _Layout.cshtml.

При необходимости вы также можете передать модель в метод RenderAction.

0 голосов
/ 27 октября 2014

Я надеюсь, что вопрос, который вы задали, это как .... Можем ли мы иметь контроллер для Shared Layout View.

Простой ответ - нет.

Для достижения этой цели вы должны создать частичное представление для той же цели и поместить его в свой общий макет. Таким образом, вы можете достичь своей цели

0 голосов
/ 09 мая 2011

Хотя подход RenderAction, предоставленный WDuffy , работает хорошо, я недавно писал в блоге на эту тему, используя другой подход с использованием IoC:

http://crazorsharp.blogspot.com/2011/03/master-page-model-in-aspnet-mvc-3-using.html

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