在主页面Asp.net MVC中使用viewBag

时间:2011-05-27 15:41:59

标签: asp.net-mvc viewbag

我正在使用asp.net MVC开发一个网站

我想在用户登录网站后显示用户名。

问题是User.Identity.Name返回用户电子邮件,我不想更改它,因为用户名不是唯一的。我想在其他页面中访问电子邮件。

我喜欢在我的母版页中使用viewBag,但我不知道在哪里定义它。

如果我在Home/controller中定义它,它只适用于此操作。

我应该使用过滤器吗?

2 个答案:

答案 0 :(得分:1)

link将帮助您解决将数据传递到母版页的问题。

This是处理这种情况的“官方”方式,它以非常明确的方式解释,但我强烈建议您完全阅读第一个链接。

答案 1 :(得分:1)

如果您正在使用MVC,那么我强烈建议转移到ViewModel模式来完成此任务,而不是将对象填充到ViewBag中,主要有两个原因:1)类型安全,以及2)智能感知支持。

在这种情况下,您将从BaseViewModel继承MasterPage,并且您的操作将从BaseViewModel返回派生对象。然后,您可以在视图模型上设置数据,并在渲染时可供主页面使用:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<MyViewModelBase>" %>

或者,您可以制作一个“部分视图”,根据用户的状态呈现您需要的内容。