Что я делаю не так? \
Многое. Первое, что вы сделали неправильно, это синтаксис 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 .
Таким образом, вы определяете действие контроллера, которое будет извлекать эту информацию из некоторого источника данных (в вашем случае Session):
[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")