4

仍在尝试使用 MVC4 掌握新的 SimpleMembership。我将模型更改为包含 Forename 和 Surname,效果很好。

我想更改登录时显示的信息,而不是在视图中使用 User.Identity.Name 我想做类似 User.Identity.Forename 的操作,实现此目的的最佳方法是什么?

4

1 回答 1

5

Yon 可以利用@Html.RenderAction()ASP.NET MVC 中可用的功能来显示此类信息。

_Layout.cshtml 查看

@{Html.RenderAction("UserInfo", "Account");}

查看模型

public class UserInfo
{
    public bool IsAuthenticated {get;set;}
    public string ForeName {get;set;}
}

帐户控制器

public PartialViewResult UserInfo()
{
   var model = new UserInfo();

   model.IsAutenticated = httpContext.User.Identity.IsAuthenticated;

   if(model.IsAuthenticated)
   {
       // Hit the database and retrieve the Forename
       model.ForeName = Database.Users.Single(u => u.UserName == httpContext.User.Identity.UserName).ForeName;

       //Return populated ViewModel
       return this.PartialView(model);
   }

   //return the model with IsAuthenticated only
   return this.PartialView(model);
}

用户信息视图

@model UserInfo

@if(Model.IsAuthenticated)
{
    <text>Hello, <strong>@Model.ForeName</strong>!
    [ @Html.ActionLink("Log Off", "LogOff", "Account") ]
    </text>
}
else
{
    @:[ @Html.ActionLink("Log On", "LogOn", "Account") ]
}

这做了一些事情并带来了一些选项:

  1. 使您的视图不必在 HttpContext 周围嗅探。让控制器来处理它。
  2. 您现在可以将它与[OutputCache]属性结合使用,这样您就不必在每个页面中都呈现它。
  3. 如果您需要向 UserInfo 屏幕添加更多内容,只需更新 ViewModel 并填充数据即可。没有魔法,没有 ViewBag 等。
于 2012-10-04T22:02:46.587 回答