2

_Layout.cshtml と _LogOnPartial.cshtml を提供する新しいプロジェクト テンプレートから ASP MVC3 を使用しています。_LogOnPartial には、ユーザーがログインしたときに表示されるテキストがあります。モデルから独自の追加データをそこに表示し、それをすべてのビューに表示するにはどうすればよいですか?

これが私が試したものですが、モデルデータがないため、もちろん機能しません:

@if(Request.IsAuthenticated) {
<text>Hello, <strong>@User.Identity.Name</strong>! - Account Balance: @Model.GetAccountBalance()
[ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
}
else {
@:[ @Html.ActionLink("Log On", "LogOn", "Account") ]
}
4

2 に答える 2

5

似たようなものがあり、Html.RenderAction() を使用して実際にアカウント情報ボックスを表示します。基本的に、それはかなり単純な設定になります

レイアウト ビュー

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

ビューモデル

public class AccountInformation(){
    public bool IsAuthenticated {get;set;}
    public string UserName {get;set;}
    public int AccountBalance {get;set;}
}

アカウント コントローラー

public PartialViewResult Information(){
   var model = new AccountInformation();
   model.IsAutenticated = httpContext.User.Identity.IsAuthenticated;
   if(model.IsAuthenticated){
       model.UserName = httpContext.User.Identity.Name;
       model.AccountBalance = functionToGetAccountBalance();
       //Return the fully populated ViewModel
       return this.PartialView(model);
   }
   //return the model with IsAuthenticated only set since none of the 
   //other properties are needed
   return this.ParitalView(model);
}

インフォメーションビュー

@model AccountInformation

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

これはいくつかのことを行い、いくつかのオプションをもたらします

  1. ビューが HttpContext をスニッフィングする必要がないようにします。コントローラーに対処させてください。
  2. これを [OutputCache] 属性と組み合わせることができるようになったため、毎回レンダリングする必要がなくなりました。独身。ページ。
  3. アカウント情報画面にさらに情報を追加する必要がある場合は、ViewModel を更新してデータを入力するだけです。魔法もViewBagもありません。
于 2012-09-03T20:16:06.203 に答える
-2

このビューで使用される ViewModel を変更し、追加データを追加する必要があります。

于 2012-09-03T20:10:44.173 に答える