我们有类似的东西并使用 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] 属性结合使用,这样您就不必每次都渲染它。单身的。页。
- 如果您需要向 Account Information 屏幕添加更多内容,只需更新 ViewModel 并填充数据即可。没有魔法,没有 ViewBag 等。