0
在局部視圖中,我必須訪問Session
變量LoginInfo
,它包含一個LoginInfo
對象。我試過以下內容:局部視圖難度ASP.NET MVC
@LoginInfo info = @(LoginInfo)Session["LoginInfo"]
但它給我編譯錯誤。我究竟做錯了什麼?
在局部視圖中,我必須訪問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")
我不明白ChildActionOn您可以解釋如何在部分內容中查看會話 – Demodave 2015-08-28 17:02:19