Man*_*anu 3 c# model-view-controller razor-pages
我的 razor 视图绑定到由 ActionResult 控制器传递的 ListViewModel;请参阅下面的代码片段:
视图模型
public class TicketItemViewModel
{
public int Id { get; set; }
public int? UserId { get; set; }
public int? TicketId { get; set; }
public string Title { get; set; }
[AllowHtml]
public string Body { get; set; }
public DateTime? Posted { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器
public ActionResult TicketHistoryC(int ticketId)
{
var ticket = UnitOfWork.GetById<Ticket>(ticketId);
var entities = UnitOfWork.GetAll<TicketItem>().Where(u => u.TicketId == ticketId).OrderByDescending(u => u.Posted).ToList();
List<TicketItemViewModel> listModel = new List<TicketItemViewModel>();
foreach (var entity in entities)
{
TicketItemViewModel model = new TicketItemViewModel();
model.Body = entity.Body;
model.Posted = entity.Posted;
model.UserId = entity.UserId;
model.TicketId = entity.TicketId;
model.Id = entity.Id;
model.Title = ticket.Title.ToString();
listModel.Add(model);
}
return View(listModel);
}
Run Code Online (Sandbox Code Playgroud)
在视图的顶部,我想显示 ViewModel 第一项的属性。以下是我的最佳尝试:
@model IEnumerable<Presentation.Host.Models.TicketItemViewModel>
@{int i = 0;}
@foreach (var item in Model)
{
if (i == 1)
{
break;
}
else
{
<h2>@Html.DisplayFor(modelItem => item.Title)</h2>
i = i + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
该代码有效,但我想知道是否有更好或更有效的方法来仅获取第一项?
您可以使用Linq并首先检查您是否Model至少有一条记录,然后使用Model.First()来获取第一条记录。
@model IEnumerable<Presentation.Host.Models.TicketItemViewModel>
@if (Model.Any())
{
<h2>@Html.DisplayFor(modelItem => Model.First().Title)</h2>
}
Run Code Online (Sandbox Code Playgroud)
编辑Model.Take(1):或者我们也可以使用。
Enumerable.Take:从序列开头返回指定数量的连续元素。
@model IEnumerable<Presentation.Host.Models.TicketItemViewModel>
@foreach (var item in Model.Take(1))
{
<h2>@Html.DisplayFor(modelItem => Model.First().Title)</h2>
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7135 次 |
| 最近记录: |