我们可以在 Layout.cshtml 中添加模型吗?

Can we add Models in Layout.cshtml?

我有 4 个页面的布局,在 header 我需要访问登录管理员的名称。如何在我添加的布局开始时在管理中访问该数据库模型

    @model ProjectName.Models.Admin

并且在从管理员访问名称时我正在写

    @Model.Name

如何以正确的方式在布局中访问该属性给出了错误,它不能是局部视图,它应该是布局,所以请帮助

正如@Stephen Muecke 在他对您的问题的评论中所说,有更多方法可以做到这一点。我建议您保留没有模型的布局视图。否则正如@Stephen Muecke 提到的那样,您将不得不为每个使用相同或派生类型布局的视图创建模型类型,这会给您的代码增加不必要的复杂性。

所以另一种方法是在您想要呈现用户名的位置在布局视图中调用 HtmlHelper.Action(...)HtmlHelper.RenderAction()。示例:

布局页面:

...
<div class="admin-name">
    @{ Html.RenderAction("AdminName", "Partial"); }
</div>
...

添加控制器:

public class PartialController : Controller {
    [ChildActionOnly] // action cannot be requested directly via URL
    public ActionResult AdminName() {
        string adminName = ...; // assign value to adminName variable
        return Content(adminName);
    }
}

您需要在应用程序的许多页面中登录用户详细信息,因此最好 将登录用户详细信息存储在 Session 中,您可以检索 session 任何 view/partial 视图中的值。

其他解决方案:

创建您的 header 局部视图并从布局调用

Html.RenderAction("actionName", "controllerName")

在控制器中创建一个操作方法,returns 局部视图

控制器动作方法

[HttpGet]
public ActionResult Header()
{
    HeaderModel HM = new HeaderModel()
    // Your user information in HeaderModel
    return PartialView("Header", HM)
}

_layout.cshtml

<body>
    <div>
        @{Html.RenderAction("Header", "ControllerName");}
    </div>
</body>

希望这能解决您的问题。