似たようなものがあり、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") ]
}
これはいくつかのことを行い、いくつかのオプションをもたらします
- ビューが HttpContext をスニッフィングする必要がないようにします。コントローラーに対処させてください。
- これを [OutputCache] 属性と組み合わせることができるようになったため、毎回レンダリングする必要がなくなりました。独身。ページ。
- アカウント情報画面にさらに情報を追加する必要がある場合は、ViewModel を更新してデータを入力するだけです。魔法もViewBagもありません。