Что я делаю не так? \
Много вещей. Первое, что вы допустили, - синтаксис 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