MVC 3:聚合模型问题

时间:2011-05-01 17:36:56

标签: asp.net-mvc asp.net-mvc-3

在我的HomeController中,我有以下3个查询,请注意第3个查询不是“ToList”,而只是第一个使用的结果。

var model = new AggregateModel();
model.Tasks = db.Task.Where(n => (n.UserId == UserID) && (n.Completed == false) && (n.Due > dateTime)).ToList();
model.Events = db.Events.Where(n => (n.UserId == UserID) && (n.Start < dateTime)).OrderBy(p => p.Start).ToList();
model.NextEvent = db.Events.Where(n => (n.UserId == UserID) && (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”定义从“public List”更改为其他类型,但我不确定所需的正确术语。

非常感谢您的帮助。

[编辑]

基本上从NextEvent模型中,我想拉出一个结果并在我的视图中显示它,但是下面的foreach下面有一个红线。

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

2 个答案:

答案 0 :(得分:4)

您可能正在寻找

public Event NextEvent {get;set;}

编辑: 广告。第二个'foreach'问题。 Foreach仅用于迭代集合,但NextEvent是单个实体。所以没有什么可以与foreach迭代。您可以像这样访问您的NextEvent:

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

如果你没有在视图中重命名默认模型,那么至少应该有效。

Model = AggregateModel
Model.NextEvent = AggregateModel.NextEvent

答案 1 :(得分:1)

删除foreach,将代码更改为&gt;

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