部分ビューでは、LoginInfo
オブジェクトを保持する変数LoginInfo
にアクセスする必要があります。私は以下を試した:部分的な難易度ASP.NET MVC
@LoginInfo info = @(LoginInfo)Session["LoginInfo"]
しかし、それは私にコンパイラエラーを与える。私は間違って何をしていますか?
部分ビューでは、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
とします)、 uはすべてのビューに共通のウィジェットを表示しようとしています。それは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