Как получить информацию о модели в _layout.vbhtml?

VS2013, MVC5 ВБ

В этом SO сообщение дело ясно сказано, что мы должны держать логику вне представления, и это демонстрирует, как поместить простые логические значения в модель представления.

Но если элемент меню, который я хочу скрыть на основе роли, находится в частичном представлении _layout.vbhtml, как я могу получить информацию о модели для кода этого частичного представления? Я понимаю, как передать информацию о модели частичному представлению, вызываемому из представления, но _layout автоматически вызывается для каждого представления. Ожидается, что модели будут разными для разных представлений.

В настоящее время у меня есть:

@If User.IsInRole("Admin") Then

в коде частичного представления для _layout, потому что я не мог сразу увидеть, как я поместил эту логику в метод для _layout.


person Alan    schedule 04.03.2015    source источник


Ответы (2)


Модель, которую вы передаете из своего действия, будет доступна в вашем представлении _layout. Вот что вы можете сделать:

  • Выведите свою модель представления из базовой модели представления и получите строго типизированную модель в представлении _layout.

    @model BaseViewModel

  • Используйте модель динамического типа (EDIT: только что заметили, что вы используете VB, не думайте, что это может быть вариантом для вас)

    @model dynamic

Дополнительная информация о asp.net

person GvM    schedule 04.03.2015

Предполагая, что любой фрагмент, который вы пытаетесь отобразить, не требует ничего, что нельзя получить за одно действие, вы можете сделать что-то вроде этого:

_Layout.vbhtml

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
</head>
<body>
    @Html.Action("someaction", "widget")

    @RenderBody()
</html>

Ваше действие

Public Class WidgetController Inherits System.Web.Mvc.Controller

    Public Function SomeAction() As ActionResult

        Dim model As New YourViewModel()

        Return PartialView("_partialViewName", model)
    End Function

End Class

Html.Action() вернет результат любого вызываемого вами метода действия; предполагая, что результатом является HTML, он внедряется в визуализированный макет, подобно include в PHP (при условии, что вы когда-либо использовали PHP). Возврат частичного представления означает, что _Layout не будет вызываться при рендеринге представления.

person Tieson T.    schedule 04.03.2015