2013-05-09 48 views
0


我正在開發一個使用C#和SQL Server 2005的ASP.Net MVC 3應用程序。我正在使用Code First Method的實體框架。如何向當前用戶顯示使用ASP MVC和EF

我有一個LOG ON(連接)的接口,它與我的基地有關,我有一個USER表(包含Login +密碼)。

我只想顯示當前登錄的用戶。所以,我爲用戶創建了一個ViewModel類,但是我沒有得到任何結果。 這是我試圖在我的控制器做:

public ActionResult LogOn() 
     { 


      var user = new UserViewModel(); 
      user.Nom_User = this.User.Identity.Name; 
      ViewData["UserDetails"] = user; 
      return View(); 
     } 

這個我添加在母版頁的內容:

<% var User = ViewData["UserDetails"] as MvcApplication2.ViewModels.UserViewModel; %> 
Hello : <%: User.Nom_User %>! 

當我執行,我有這樣的錯誤:

未將對象引用設置爲對象的實例。

回答

2

你說你把這段代碼放在你的MasterPage中。這意味着它將每視圖運行

但是,您只在LogOn操作中設置了ViewData["UserDetails"]。因此,當您導航到其他某個操作(例如Home/Index操作)時,它將會彈起,因爲此ViewData["UserDetails"]中沒有任何內容,當然這個User變量在您的母版頁中聲明的將爲空。

我會建議你使用一個孩子的行動。

[ChildActionOnly] 
public ActionResult LogedInUser() 
{ 
    if (!Request.IsAuthenticated) 
    { 
     return PartialView(); 
    } 

    var user = new UserViewModel(); 
    user.Nom_User = User.Identity.Name; 
    return PartialView(user); 
} 

,並在你的母版:

<% Html.RenderAction("LogedInUser", "Account"); %> 

或者如果你喜歡:

<%= Html.Action("LogedInUser", "Account") %> 

最後你可以有相應的LogedInUser.ascx部分將被強類型到您的視圖模型:

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<UserViewModel>" 
%> 

<% if (Model != null) { %> 
    <div>Hello : <%= Html.DisplayFor(x => x.Nom_User) %></div> 
<% } %> 

菲爾·哈克在更多細節上對兒童行爲進行了博客here

+0

感謝您的回答,我按照您的指示,但有一個編譯錯誤關於<%Html.RenderAction(「Account」,「LogedInUser」)%> – anouar 2013-05-09 12:26:02

+0

對不起,我忘記了一個尾隨';'。它應該是:'<%Html.RenderAction(「Account」,「LogedInUser」); %>'。我已經更新了我的答案。 – 2013-05-09 12:26:56

+0

對不起,打擾你,,,但總是有這個錯誤: 路徑'/'的控制器沒有找到或沒有實現IController。 – anouar 2013-05-09 12:34:24

1

嘗試使用session

Session["user"]=this.User.Identity.Name; 

,並考慮你可以得到的用戶名與<% var User =Session["user"]%>或者你可以直接使用: <% var User =this.User.Identity.Name;%>