gpt4 book ai didi

c# - 如何在 MVC 布局或 ViewStart 页面中引用自定义类?

转载 作者:行者123 更新时间:2023-11-30 14:33:39 26 4
gpt4 key购买 nike

我正在开发一个 MVC 应用程序,该应用程序将由一些内部(即经过 Windows 身份验证的)员工使用。对我来说不幸的是,我们的 Active Directory 帐户并不知道每个员工的 ID——我们的员工数据库根本不与 AD 对话(我知道这会引起畏缩)。

无论如何,网站必须记录每个员工的ID,因为他或她对各种记录进行了更改。过去(在 ASP.NET WebForms 中),我会在 Session 中添加对自定义类的引用,并仅使用它来检查访问权限、获取员工 ID 并在顶部显示员工的全名申请。

我如何在 MVC 中执行此操作?我知道我可以向 Session 添加数据,但是我找不到任何方法来在 _Layout.cshtml 文件中清晰地引用 Session 数据,老实说,我更愿意将这些数据存储在一个我可以获得 Intellisense 的类中,而不是使用数组索引器。我是不是太挑剔了?

要清楚:我正在尝试弄清楚如何在布局或母版页中引用存储在自定义类中的信息,或者这是否只是一个完整的愚蠢的想法。

最佳答案

正如 Christopher 所说,从企业设计的角度来看,强类型 View 是最佳方法。但是,它在您的布局中这一事实让您感到困惑。你需要做的是在你的布局中,调用一个 Controller Action 来渲染你想要的内容,它返回的 View 是强类型的 View 模型,其中包含你需要显示的所有数据。

假设您想编写一个用户菜单,其中包含一些选项,具体取决于他们的安全访问权限,以及一条“欢迎 Bob Ross”消息(假设 Bob 已登录)。

所以在您看来,您的 _Layout 会有一个像这样的 div...

        <div id="header" class="header">
@{ Html.RenderAction("RenderUserMenu", "Home"); }
</div>

现在,在 Home Controller 中,您有一个名为 RenderUserMenu 的操作,看起来有点像

public ActionResult RenderUserMenu()
{
var currentUser = DataManager.GetCurrentUser();
return PartialView("_UserMenu", currentUser);
}

此菜单是针对域用户对象的强类型,因此在该 View 中,您现在可以打印出您想要的有关用户的任何信息,它是 _Layout 的一部分并显示在从它继承的每个页面上。

这里唯一的巫术是 DataManager.GetCurrentUser() 函数,但我希望您有某种类型的基础结构来获取 Controller 中任何位置的当前用户。如果不是,它只是一个从 session 中提取用户 key 、查询数据库并使用用户数据填充域对象的函数。如果您使用的是 Entity Framework 或 NHibernate 之类的 ORM,那就更容易了。

关于c# - 如何在 MVC 布局或 ViewStart 页面中引用自定义类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15936939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com