2016-05-18 2 views
0

У меня есть две модели, и мне нужно отображать данные на моей странице макета и на каждой странице, которую посещает пользователь. У этих двух моделей нет никаких отношений между ними, поэтому мне не нужно какое-либо соединение.Отображать данные для двух таблиц на странице макета MVC 5

это мой контроллер

public ActionResult Index() 
    { 
     var notification = (from n in db.Notification 
          where n.NotificationIsSeen == true 
          select n); 



     var task = (from t in db.Task 
          where t.TaskIsSeen == true 
          select t); 

     return View();// I not sure how to return both of queries 
    } 

Я также создать модель, которая содержит их обоих, но я «не уверен, что это правильный путь

public class Layout 
{ 


    public Notification Notification { get; set; } 
    public Task Task { get; set; } 
} 

и в моей странице макета

@model IEnumerable<MyprojectName.Models.Layout> 

//other code 
@foreach (var item in Model) 
{ 
    <li>@Html.DisplayFor(modelItem => item.Notification.NotificationSubject) </li>} 

//other code 
@foreach (var item in Model) 
{ 
    <li>@Html.DisplayFor(modelItem => item.Task.TaskSubject) 
    </li> 
    } 

Я видел другой подобный вопрос, но они работают с таблицами соединений. Мне нужна помощь по возврату данных обеих таблиц. заблаговременно

+2

Вы запросы возвращают коллекции, так что ваш вид потребности модели для 'public class Layout {public IEnumerable Уведомления {get; задавать; } publicIEnumerable Задачи {get; задавать; }} 'и верните один экземпляр« Макет »в представление. –

+0

Существует некоторая путаница в том, что вам нужно. В вашей модели есть одно «уведомление» и «задача», но в вашем методе действий вы получаете коллекцию обоих. Вы видите, что ему нужна коллекция вашей модели. Можете ли вы уточнить, что такое предполагаемое поведение? – Nkosi

+0

Stephen Muecke. Что вы хотите сказать о возврате одного экземпляра макета? спасибо – touinta

ответ

3

Ваши запросы в вашем методе действий возвращают коллекции данных. Чтобы учесть это, ваша модель просмотра должна иметь два списка и должна выглядеть примерно так. Вы должны быть в состоянии хранить эти коллекции в списках при отправке их мнение:

public class Layout 
{ 
    public IEnumerable<Notification> Notifications { get; set; } 

    public IEnumerable<Task> Tasks { get; set; } 
} 

Чтобы заполнить эти списки изменения кода в методе действия к этому. Создание экземпляра Layout, заполнить два списка, а затем отправить экземпляр в виде:

public ActionResult Index() 
{ 
    Layout model = new Layout(); 

    model.Notifications = (from n in db.Notification 
          where n.NotificationIsSeen == true 
          select n); 

    model.Tasks = (from t in db.Task 
        where t.TaskIsSeen == true 
        select t); 

    return View(model); 
} 

Ваше мнение должно принимать и экземпляр Layout:

@model MyprojectName.Models.Layout 

@foreach (var notification in Model.Notifications) 
{ 
    <div> 
      @notification.NotificationSubject 
    </div> 
} 

@foreach (var task in Model.Tasks) 
{ 
    <div> 
      @task.TaskSubject 
    </div> 
} 

Я надеюсь, что это помогает.

+0

спасибо, что это работает! Но единственная проблема, которую я испытываю, заключается в том, что когда я перехожу на другую страницу, она дает ошибку в отношении моделей. Как я могу использовать это так, чтобы видеть пчел во всех взглядах – touinta

+1

Объясните мне, что вы пытаетесь сделать? Я думаю, может быть, это может быть другой вопрос. Один вопрос за раз :) –

+0

ok Я имею в виду, что мне нужно отображать эти данные на каждую страницу не только по индексу. На моей странице макета я вызываю модель макета. Но когда я нажимаю на другую страницу, я получаю ошибку «Элемент модели, переданный в словарь, имеет тип« System.Collections.Generic.List'1 [Myprojectname.Models.Notification] », но для этого словаря требуется элемент модели типа "Myprojectname.Models.Layout«. – touinta

-1

Пожалуйста, объявить список тип модели в вас макет модели

Layout Модель

public class Layout 
{ 
public IEnumerable<Notification> Notifications { get; set; } 

public IEnumerable<Task> Tasks { get; set; } 
} 

Контроллер

public ActionResult Index() 
{ 
Layout model = new Layout(); 

model.Notifications = (from n in db.Notification 
         where n.NotificationIsSeen == true 
         select n); 

model.Tasks = (from t in db.Task 
       where t.TaskIsSeen == true 
       select t); 

    return View(model); 
} 

Посмотреть

@model MyprojectName.Models.Layout 

@foreach(var item in Model.Notifications) 
{ 
// access your item.propertyname  
} 


@foreach(var item in Model.Task) 
{ 
// access your item.propertyname 
} 
Смежные вопросы