从列表模型中提取标题的单个元素
本文关键字:单个 元素 标题 提取 列表 模型 | 更新日期: 2023-09-27 17:49:15
我有一个List Model
有几行。在Model
中,我想拉出某些部分显示在页面顶部,一些作为数据的标题,然后是数据部分本身。当我将此列表或IEnumeration
拉到视图时,它将按预期显示所有数据,但无法显示First()
或任何其他获取这些标题的方式。我应该用另一种方式显示视图吗?
目标:
带有事件名称和日期的标题行(当前在列表的每一行中)具有自己的标题的数据组或表也基于列表中的数据以上每组的详细数据。
我有一个局部视图来循环遍历核心数据。
建议好吗?
代码是混乱的,但这里是:
视图@model IEnumerable<eManager.Web2.Models.EventClassCompListVM>
@{
ViewBag.Title = "EventCompClassReport";
}
<h2>EventCompClassReport</h2>
<table class="table">
@Html.DisplayFor(model => model.EventName) //Tried several ways to identify this, but it is in the List so no way to single it out.
@Html.EditorForModel()
}
</table>
局部视图(按预期循环遍历List)
@model eManager.Web2.Models.EventClassCompListVM
<tr>
<td>
@Html.DisplayFor(modelItem => Model.Comp_EventID)
</td>
<td>
@Html.DisplayFor(modelItem => Model.CompName)
</td>
<td>
@Html.DisplayFor(modelItem => Model.ClassName)
</td>
<td>
@Html.DisplayFor(modelItem => Model.ClassOrder)
</td>
<td>
@Html.DisplayFor(modelItem => Model.IsCrossOver)
</td>
</tr>
控制器类(尽管它只是返回几行数据)
public ActionResult BuildEventClassReports()
{
var model = from o in _db.Events
join o2 in _db.Event_Classes on o.EventID equals o2.EventID
where o.EventID.Equals(o2.EventID)
join o3 in _db.Event_Class_Compeditors_s on o2.EventClassID equals o3.EventClassID
where o2.EventClassID.Equals(o3.EventClassID)
join o4 in _db.Compeditors on o3.CompeditorId equals o4.CompeditorId
where o3.CompeditorId.Equals(o4.CompeditorId)
join o5 in _db.Class_Definitions on o2.ClassID equals o5.Class_Definition_ID
where o2.ClassID.Equals(o5.Class_Definition_ID)
where o.CurrentEvent.Equals(true)
orderby o2.ClassOrder
//orderby o3.Comp_EventID
select new EventClassCompListVM {
EventName = o.EventName,
EventDate = o.Date_End,
ClassName = o5.Class_Name,
Comp_EventID = o3.Comp_EventID,
ClassOrder = o2.ClassOrder,
CompName = (o4.FirstName + " " + o4.LastName),
IsCrossOver = o3.IsCrossOver };
return View(model);
编辑:一些新的代码让我更接近…但是我不知道如何从第一个foreach中获得一些数据部分。代码行@Html。显示器不工作了。文字"mumbo Jumbo"效果很好,可以把小组分开。任何帮助都很感激!!
当前视图代码:
<h2>
@(Model.Any() ? Model.First().EventName : "")
@(Model.Any() ? Model.First().EventDate.ToShortDateString() : "")
</h2>
@foreach (var group in Model.GroupBy(item => item.ClassID))
{
<tr><td><b>mumbo jumbo</b>
</td></tr>
@Html.DisplayFor(modelItem => Model.ClassName) //Cannot get this line to work.
foreach (var item in group)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Comp_EventID)
</td>
<td>
@Html.DisplayFor(modelItem => item.CompName)
</td>
<td>
@Html.DisplayFor(modelItem => item.ClassName)
</td>
<td>
@Html.DisplayFor(modelItem => item.ClassOrder)
</td>
<td>
@Html.DisplayFor(modelItem => item.IsCrossOver)
</td>
</tr>
}
}
我相信有更好的方法来做到这一点,但我现在能想到的是将标题存储为一个单独的列表。
创建一个新类作为视图的模型,并在数据中包含标题列表。例如
public class MainViewModel
{
public IEnumerable<string> Titles { get; set;}
public IEnumerable<eManager.Web2.Models.EventClassCompListVM> Models { get; set;}
}
在BuildEventClassReports()操作中相应地填充这个类,并将这个类传递给视图。
然后你可以传递Model。使用@Html将EventClassCompListVM添加到分部视图。Partial("viewname", Model.EventClassCompListVM)