Подтвердить что ты не робот

Asp.Net Mvc - Как иметь "контроллер" в общем виде

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

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

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

Вот _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>

4b9b3361

Ответ 1

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

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")

Ответ 2

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

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

Ответ 3

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

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

Ответ 5

Я надеюсь, что вопрос, который вы задали, как.... Можем ли мы иметь контроллер для представления общего макета.

Простой ответ: Нет.

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