我在AggregateModel中有两个查询,我希望它们被传递到索引视图,以便在两个单独的foreach循环中使用.但截至目前,他们都是在一个模型中通过.
该模型
public class AggregateModel
{
public List<Task> Tasks { get; set; }
public List<Event> Events { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
HomeController.cs
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)).ToList();
return View(model);
Run Code Online (Sandbox Code Playgroud)
如果视图删除冗余位,则这是大多数:
@model IEnumerable<ProjectApp.Models.AggregateModel>
<div id="upcoming-tasks">
<h4>Your Upcoming Tasks</h4>
<ul class="upcoming">
@foreach (var item in Model.Tasks)
{
<li>@Html.ActionLink(item.Title, "Details", new { id = item.TaskId })</li>
}
<li>Add a @Html.ActionLink("Task", "Create", "Task")</li>
</ul>
</div>
<div id="upcoming-events">
<h4>Your Upcoming Events</h4>
<ul class="upcoming">
@foreach (var item in Model.Events)
{
<li>@Html.ActionLink(item.Title, "Details", new { id = item.EventId })</li>
}
<li>Add a @Html.ActionLink("Task", "Create", "Task")</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
如您所见,foreach循环调用Model,其中包含两个查询.我想有两个循环,每个循环运行一个查询.
提前谢谢了.
在您的视图顶部,您应该:
@model AggregateModel
Run Code Online (Sandbox Code Playgroud)
并不是
@model IEnumerable<Task>
Run Code Online (Sandbox Code Playgroud)
然后你可以循环:
@foreach (var item in Model.Tasks)
{
}
...
@foreach (var item in Model.Events)
{
}
Run Code Online (Sandbox Code Playgroud)
并且因为在视图中循环是丑陋的,你应该使用编辑器/显示模板,这将简化你的代码:
@Html.DisplayFor(x => x.Tasks)
...
@Html.DisplayFor(x => x.Events)
Run Code Online (Sandbox Code Playgroud)
您应该在哪里定义将为集合的每个元素呈现的对应~/Views/Shared/DisplayTemplates/Task.cshtml和~/Views/Shared/DisplayTemplates/Event.cshtml模板.
| 归档时间: |
|
| 查看次数: |
2693 次 |
| 最近记录: |