2010-10-27 52 views
3

显示的用户名以下是从标准的默认ASP.NET MVC项目由Visual Studio中创建的LogOn支持用户控件(LogOnUserControl.ascx):ASP.NET MVC从档案

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
<% 
if (Request.IsAuthenticated) { 
%> 
Welcome <b><%: Page.User.Identity.Name %></b>! 
[ <%: Html.ActionLink("Log Off", "LogOff", "Account") %> ] 
<% 
} 
else { 
%> 
[ <%: Html.ActionLink("Log On", "LogOn", "Account")%> ] 
<% 
} 
%> 

其被插入到一个主页:

<div id="logindisplay"> 
    <% Html.RenderPartial("LogOnUserControl"); %> 
</div> 

<%: Page.User.Identity.Name %>代码显示登录名的用户的,当前请登录。

如何显示用户的FirstName而不是保存在配置文件中?

我们可以在控制器类似如下阅读:

ViewData["FirstName"] = AccountProfile.CurrentUser.FirstName; 

如果,例如,尝试做这样:

​​

它使得仅被称为网页由控制器在ViewData["FirstName"]值分配。

+0

查看相关的链接:http://stackoverflow.com/questions/976493/asp-net-mvc-set-viewdata-for-masterpage-in-base-controller – 2010-10-27 18:55:20

回答

11

REM,

这是使具有基本控制器将解决“所有”你的问题(当然,有些反正)的案件之一。在你的基地控制器,你会碰到这样的:

public abstract partial class BaseController : Controller 
{ 
    // other stuff omitted 
    protected override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     ViewData["FirstName"] = AccountProfile.CurrentUser.FirstName; 
     base.OnActionExecuted(filterContext); 
    } 
} 

,并用它在所有的控制器,如:

public partial class MyController : BaseController 
{ 
    // usual stuff 
} 

或相似。那么您就可以在所有控制器中都可以使用它。

看看它是否适合你。

+0

谢谢,吉姆!很有用。 +1。但是,在这种情况下,我可以如何确保ViewData在用户登录时(在此之后)被赋值为“AccountProfile.CurrentUser.FirstName”值? – rem 2010-10-27 19:14:39

+0

rem - 只要这个AccountProfile通过一些“机制”可用,它就会在我上面的txtd的覆盖中可用。我知道这是事实,因为我以完全相同的方式为我现在正在处理的应用上的自定义配置文件执行此操作!其实,只是试试:) – 2010-10-27 19:20:02

+0

好吧,吉姆,谢谢你,我会探索并尝试它 – rem 2010-10-27 19:31:16