如何使用ASP MVC和EF显示当前用户

时间:2013-05-09 12:06:52

标签: c# asp.net-mvc-3 visual-studio-2010 sql-server-2005


我正在使用C#和SQL Server 2005开发一个ASP .Net MVC 3应用程序。我还使用了Entity Framework和Code First Method。

我有一个LOG ON(连接)的接口,它与我的基础相关,我有一个USER表(包含登录名+密码)。

我只是想显示记录的当前用户。所以,我为用户创建了一个ViewModel类,但我没有得到任何结果。 这就是我在Controller中尝试做的事情:

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 个答案:

答案 0 :(得分:2)

您说您已将此代码放在MasterPage中。这意味着它将针对每个视图运行。

但您只在ViewData["UserDetails"]操作中设置了LogOn。因此,当您导航到其他一些操作(例如Home / Index操作)时,它会爆炸,因为此ViewData["UserDetails"]内部没有任何内容,当然您在MasterPage中声明的此User变量将是空。

我建议你使用儿童行动。

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

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

并在您的MasterPage中:

<% 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>
<% } %>
菲尔·哈克(Phil Haack)在更多细节here上发表了关于儿童行为的博文。

答案 1 :(得分:1)

尝试使用session

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

在视图中,您可以使用<% var User =Session["user"]%>获取用户名,也可以直接使用: <% var User =this.User.Identity.Name;%>