在母版页 Asp.net MVC 中使用 viewBag
我正在使用 asp.net MVC 开发一个网站,
我想在用户登录网站后显示用户名。
问题是 User.Identity.Name
返回用户电子邮件,我不想更改它,因为用户名不是唯一的。我想访问其他页面中的电子邮件。
我喜欢在我的母版页中使用 viewBag,但我不知道在哪里定义它。
如果我在 Home/controller
中定义它,它仅适用于此操作。
我应该使用过滤器吗?
I am developing a website using asp.net MVC
I want to show the name of user after he/she logged in the website.
The problem is that User.Identity.Name
returns user email and I do not want to change that because user name is not unique. And I want to access email in other pages.
I like to use a viewBag in my master page, but I do not know where to define it.
If I define it in Home/controller
, it works just for this action.
Should I use filter?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这个链接将帮助您解决传递问题数据到母版页。
这是“官方”处理这个问题的方法,它以非常清晰的方式解释,但我强烈建议也完整阅读第一个链接。
This link will help you with the problem of passing data to master page.
This is the "official" way to handle that, it explains in a very clear way, but I strongly recommend to read the first link completly too.
如果您使用 MVC,那么我强烈建议改用 ViewModel 模式来完成此任务,而不是将对象填充到 ViewBag 中,主要有两个原因:1) 类型安全,2) 智能感知支持。
在这种情况下,您的 MasterPage 将从 BaseViewModel 继承,并且您的操作将从 BaseViewModel 返回派生对象。然后,您可以在视图模型上设置数据,渲染时母版页将可以使用该数据:
或者,您可以创建一个“部分视图”,根据用户的状态仅渲染您需要的内容。
If you're using MVC, then I would strongly suggest moving to a ViewModel pattern to accomplish this, rather than stuffing objects into the ViewBag, mostly for two reasons: 1) Type Safety, and 2) Intellisense support.
In this kind of situation, you would have your MasterPage inherit from a BaseViewModel, and your actions would return derived objects from the BaseViewModel. You can then set data on your view model, and it will be available to the master page when rendering:
Alternatively, you could make a 'partial view' that renders just the content you need based on the user's state.