如何将模型信息输入_layout.vbhtml?

时间:2015-03-04 16:57:25

标签: asp.net-mvc vb.net razor authorize-attribute

VS2013,MVC5 VB

在这个SO post中明确指出我们应该将逻辑排除在视图之外,它演示了如何将简单的布尔值放入视图模型中。

但是,如果我想基于角色隐藏的菜单项位于_layout.vbhtml局部视图中,我如何获取该部分视图代码的模型信息?我理解如何将模型信息传递给从视图调用的局部视图,但是_layout会自动为每个视图调用。对于不同的观点,预计模型会有所不同。

我目前有:

@If User.IsInRole("Admin") Then

在_layout的局部视图代码中,因为我无法立即看到如何将该逻辑放入_layout的方法中。

2 个答案:

答案 0 :(得分:0)

您在动作中传递的模型将在您的_layout视图中提供。你可以做的一些事情:

  • 从基本视图模型中导出视图模型,并在_layout视图中使用强类型模型

    @model BaseViewModel

  • 使用动态类型模型(编辑:只是注意到你正在使用VB,不要认为这可能是你的选择)

    @model dynamic

有关asp.net

的更多信息

答案 1 :(得分:0)

假设您尝试渲染的任何部分不需要在单个动作中无法获取的任何内容,您可以执行以下操作:

_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,它会被注入到渲染的布局中,类似于PHP中的include(假设您曾经使用过PHP)。返回局部视图意味着在渲染视图时不会“调用”_Layout。