2015-12-04 2 views
0

Я сохранил модель в объекте сеанса в моем контроллере, но теперь я не имею понятия, как получить к нему доступ в моем представлении.Доступ к сохраненной модели объекта сеанса от контроллера в представлении

public ActionResult Test() 
{ 
    using (DefaultConnection db = new DefaultConnection()) 
    { 
     var model = from u in db.Users select u; 
     Session["User"] = model; 

     var vm = Session["User"] as User; 
     return View(vm); 
    } 
} 

Я пробовал это на мой взгляд, но у меня нет опыта работы с MVC, поэтому я не уверен, насколько я далеко.

@model IEnumerable<WebApplication1.Models.User> 

@if (Model != null) 
{ 
    foreach (var item in Model) 
    { 
     <h1>item.Username</h1> 
    } 
} 

Ничего не появляется, когда я запускаю его, но я знаю, что есть данные.

ответ

1

В контроллере:

public ActionResult Test() 
    { 
     using (DefaultConnection db = new DefaultConnection()) 
     { 
      var model = from u in db.Users select u; 
      Session["Users"] = model.ToList(); 
      return View(); 
     } 
    } 

На ваш взгляд:

@(foreach(var item in ((List<User>)Session["Users"])) 
{ 
    item.Username 
} 

Если вы хотите, чтобы ваш взгляд «напечатанный» с классом пользователя, то вы должны отправить его на ваш взгляд, как :

public ActionResult Test() 
{ 
    using (DefaultConnection db = new DefaultConnection()) 
    { 
     var model = from u in db.Users select u; 
     return View(model.ToList()); 
    } 
} 

Включите эту директиву в вашем Вид:

@model IEnumerable<SomeNamespace.User> 

А затем получить доступ к модели с:

@if (Model != null){ 
    foreach (var item in Model) { item.Username } 
} 
+0

Я попробовал, используя свой второй путь, потому что мне понравилось это передавалось от контроллера. Однако я столкнулся с ошибкой. Когда я пытаюсь сделать '@ Model.Username', я получаю сообщение об ошибке, когда мне нужно сначала проверить значение null. Поэтому я продолжаю и делаю '@ {if (Model! = Null) {

@ Model.Username

}}', но когда я его запускаю, ничего не появляется. Я знаю, что в моей таблице есть данные, потому что, если я использую действие Index по умолчанию для контроллера бритвы с помощью операций чтения/записи, он перечисляет все записи. –

+0

Я до сих пор не получаю ничего, позвольте мне обновить свой вопрос с помощью моего самого последнего кода, и если бы вы могли взглянуть на ошибку, я был бы признателен. –

+0

В вашем контроллере вы отправляете представление IQueryable to yout. Используйте метод расширения ToList для отправки списка на ваш просмотр. Затем проверьте, действительно ли свойство «Username» ваших пользователей имеет какое-либо значение. –

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