MVC 3: проблема с агрегированной моделью

#asp.net-mvc #asp.net-mvc-3

#asp.net-mvc #asp.net-mvc-3

Вопрос:

В моем HomeController у меня есть следующие 3 запроса, обратите внимание, что третий — это не «ToList», а просто первый используемый результат.

 var model = new AggregateModel();
model.Tasks = db.Task.Where(n => (n.UserId == UserID) amp;amp; (n.Completed == false) amp;amp; (n.Due > dateTime)).ToList();
model.Events = db.Events.Where(n => (n.UserId == UserID) amp;amp; (n.Start < dateTime)).OrderBy(p => p.Start).ToList();
model.NextEvent = db.Events.Where(n => (n.UserId == UserID) amp;amp; (n.Start < dateTime)).OrderBy(p => p.Start).First();
  

И в файле модели у меня есть следующая модель:

 public class AggregateModel
{
    public List<Task> Tasks { get; set; }
    public List<Event> Events { get; set; }
    public List<Event> NextEvent { get; set; }
}
  

Мне нужно изменить определение «nextEvent» в файле модели с «общедоступного списка» на другой тип, но я не уверен в правильном необходимом термине.

Большое спасибо за любую помощь.

[ПРАВИТЬ / ПРАВИТЬ код]

В принципе, из модели nextEvent я хочу извлечь один результат и отобразить его в моем представлении, но у следующего есть красная строка под foreach.

 @foreach (var item in Model.NextEvent)
{
    <li>@Html.ActionLink(item.Title, "Details", new { id = item.EventId })</li>
}
</ul>
  

Комментарии:

1. хм.. так и должно быть public Event NextEvent .. Не так ли?

2. Вау, ты продолжаешь публиковать здесь каждый шаг своего процесса разработки, не так ли

Ответ №1:

Вы, вероятно, ищете

 public Event NextEvent {get;set;}
  

Редактировать:
Объявление. второй «предварительный» вопрос. Foreach используется только для перебора коллекций, но nextEvent — это единый объект. Таким образом, нет ничего, что можно было бы повторить с foreach. Вы можете получить доступ к своему следующему событию следующим образом:

 <li>@Html.ActionLink(Model.NextEvent.Title, "Details", new { id = Model.NextEvent.EventId })</li>
  

По крайней мере, это должно сработать, если вы не переименовали модель по умолчанию в представлении.

Model = AggregateModel
Model.NextEvent = AggregateModel.nextEvent

Комментарии:

1. Это здорово, за исключением того, что, на мой взгляд, под «@foreach» я получаю красную строку, в которой говорится, что этот тип оператора не может быть выполнен с этим оператором. Есть какая-нибудь причина, почему?

2. @dalehumphries: Вам придется предоставить свой код. Что вы отправляете в этот foreach? Каким образом? Где… Я не понимаю, как это связано с вашим первоначальным вопросом.

3. @dalehumphries: Я добавил решение в свой ответ.

Ответ №2:

удалите foreach, измените код на >

<li>@Html.ActionLink(Model.NextEvent.Title, "Details", new { id = Model.NextEvent.EventId</li>