局部视图难度ASP.NET MVC

局部视图难度ASP.NET MVC

问题描述:

在局部视图中,我必须访问Session变量LoginInfo,它包含一个LoginInfo对象。我试过以下内容:局部视图难度ASP.NET MVC

@LoginInfo info = @(LoginInfo)Session["LoginInfo"] 

但它给我编译错误。我究竟做错了什么?

什么我做错了吗?\

许多事情。你做错的第一件事是Razor语法。它应该是:

@{ LoginInfo info = (LoginInfo)Session["LoginInfo"]; } 

但这只是语法。你有一个更大的问题。你有一个设计问题。您违反了MVC模式。

视图不应尝试获取任何数据。视图使用从视图模型形式的控制器操作传递给它的数据。

所以你定义视图模式:

public class MyViewModel 
{ 
    public LoginInfo LoginInfo { get; set; } 
} 

那么你有一个控制器动作:

public ActionResult Foo() 
{ 
    var model = new MyViewModel(); 
    model.LoginInfo = (LoginInfo)Session["LoginInfo"]; 
    return View(model); 
} 

,那么你必须在你使用视图模型一个强类型的视图:

@model MyViewModel 
<div>Hello @Model.LoginInfo.FirstName</div> 

但是在这种情况下(给定类别名称LoginInfo)我想哟你正试图在所有视图上显示一些常用的小部件。这将是使用Html.Action helper的理想选择。

所以你定义控制器的行动,将获取一些数据源(在你的情况下,会议)这样的信息:

[ChildActionOnly] 
public ActionResult LoginInfo() 
{ 
    var model = (LoginInfo)Session["LoginInfo"] ?? new LoginInfo(); 
    return PartialView(model); 
} 

,然后您定义的相应部分:

@model LoginInfo 
<div>Hello @Model.FirstName @Model.LastName</div> 

终于在你的_layout可以包含这个小部件:

@Html.Action("LoginInfo", "SomeController") 
+0

我不明白ChildActionOn您可以解释如何在部分内容中查看会话 – Demodave 2015-08-28 17:02:19