2011-12-26 4 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) Я полагаю, что лет 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") 
+0

Я не понимаю от ChildActionOn и ниже вы можете объяснить, как иметь сеансовый просмотр в частичном – Demodave

Смежные вопросы