4

MVC4 を使用した新しい SimpleMembership をまだ把握しようとしています。モデルを変更して、正常に機能する Forename と Surname を含めました。

ログイン時に表示される情報を変更したいので、ビューで User.Identity.Name を使用する代わりに、User.Identity.Forename のようなことをしたいのですが、これを達成する最善の方法は何ですか?

4

1 に答える 1

5

@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 に答える