2010-10-27 69 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