2011-12-26 61 views
0

在局部視圖中,我必須訪問Session變量LoginInfo,它包含一個LoginInfo對象。我試過以下內容:局部視圖難度ASP.NET MVC

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

但它給我編譯錯誤。我究竟做錯了什麼?

回答

14

什麼我做錯了嗎?\

許多事情。你做錯的第一件事是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