C# 如何在ASP MVC视图中仅显示最后一条记录
我正在使用存储过程(没有实体框架)开发一个ASP MVC项目 在公式中设置数据后,我只想显示最后一条记录,而不是从数据库中获取所有数据 我知道我可以编写另一个只选择最后一条记录的方法,但我想知道是否有从视图中检索该记录的解决方案 这就是我所尝试的:C# 如何在ASP MVC视图中仅显示最后一条记录,c#,sql-server,asp.net-mvc,stored-procedures,C#,Sql Server,Asp.net Mvc,Stored Procedures,我正在使用存储过程(没有实体框架)开发一个ASP MVC项目 在公式中设置数据后,我只想显示最后一条记录,而不是从数据库中获取所有数据 我知道我可以编写另一个只选择最后一条记录的方法,但我想知道是否有从视图中检索该记录的解决方案 这就是我所尝试的: @for (var i = 0; i < 1; i++) { @foreach (var item in Model) { <tr> &l
@for (var i = 0; i < 1; i++) {
@foreach (var item in Model)
{
<tr>
<th>
@Html.DisplayNameFor(model => model.FirstName)
</th>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.LastName)
</th>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Address)
</th>
<td>
@Html.DisplayFor(modelItem => item.Address)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Email)
</th>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Phone)
</th>
<td>
@Html.DisplayFor(modelItem => item.Phone)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Date)
</th>
<td>
@Html.DisplayFor(modelItem => item.Date.Date)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Time)
</th>
<td>
@Html.DisplayFor(modelItem => item.Time)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Nbre_P)
</th>
<td>
@Html.DisplayFor(modelItem => item.Nbre_P)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Items)
</th>
<td>
@Html.DisplayFor(modelItem => item.Items)
</td>
</tr>
} }
考虑到您的
模型
属于IEnumerable
类型,不确定为什么不能使用LINQ方法返回最后一个元素,您不想这样做
如果您在视图中对其进行过滤(这是可能的,但我不建议您这样做),则会加载整个列表模型项。你为什么要这么做
控制器的任务是过滤您的数据并只发送所需的项目。
在控制器调用中
Model.LastOrDefault();
您的模型应该是modelobject的列表,而不仅仅是model 最好将对象存储在这样的对象列表中
class viewmodel
{
public list<yourclassname> propertyname;
}
试试这个。不需要迭代任何循环
<tr>
<th>
@Html.DisplayNameFor(model => model.FirstName)
</th>
<td>
@Html.DisplayFor(modelItem => Model.LastOrDefault().FirstName)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.LastName)
</th>
<td>
@Html.DisplayFor(modelItem => Model.LastOrDefault().LastName)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Address)
</th>
<td>
@Html.DisplayFor(modelItem => Model.LastOrDefault().Address)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Email)
</th>
<td>
@Html.DisplayFor(modelItem => Model.LastOrDefault().Email)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Phone)
</th>
<td>
@Html.DisplayFor(modelItem => Model.LastOrDefault().Phone)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Date)
</th>
<td>
@Html.DisplayFor(modelItem => Model.LastOrDefault().Date.Date)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Time)
</th>
<td>
@Html.DisplayFor(modelItem => Model.LastOrDefault().Time)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Nbre_P)
</th>
<td>
@Html.DisplayFor(modelItem => Model.LastOrDefault().Nbre_P)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.Items)
</th>
<td>
@Html.DisplayFor(modelItem => Model.LastOrDefault().Items)
</td>
</tr>
@DisplayNameFor(model=>model.FirstName)
@DisplayFor(modelItem=>Model.LastOrDefault().FirstName)
@DisplayNameFor(model=>model.LastName)
@DisplayFor(modelItem=>Model.LastOrDefault().LastName)
@DisplayNameFor(model=>model.Address)
@DisplayFor(modelItem=>Model.LastOrDefault().Address)
@DisplayNameFor(model=>model.Email)
@DisplayFor(modelItem=>Model.LastOrDefault().Email)
@DisplayNameFor(model=>model.Phone)
@DisplayFor(modelItem=>Model.LastOrDefault().Phone)
@DisplayNameFor(model=>model.Date)
@DisplayFor(modelItem=>Model.LastOrDefault().Date.Date)
@DisplayNameFor(model=>model.Time)
@DisplayFor(modelItem=>Model.LastOrDefault().Time)
@DisplayNameFor(model=>model.Nbre\P)
@DisplayFor(modelItem=>Model.LastOrDefault().Nbre\P)
@DisplayNameFor(model=>model.Items)
@DisplayFor(modelItem=>Model.LastOrDefault().Items)
一种可能的解决方案是改变:
@foreach (var item in Model)
致:
这仍然保持了循环结构(即
foreach
),但如果您只想显示最后一条记录,而不想从我的数据库中获取所有数据,它将确保只处理原始模型中的最后一项。
您可以使用以下选项:
在控制器中:
var Bestellung = db.Bestellungs.OrderByDescending(p => p.BestellungId ).FirstOrDefault();
如果您只想在视图中显示最后一条记录,那么为什么要从数据库中查询多条记录?为什么要将多个记录传递给视图?只需查询您需要的内容,并仅将您需要的内容传递给您的视图。是的,我知道,但多个查询用于另一个视图什么是模型
?它应该是一个集合,这样你就可以对它进行迭代。理想情况下,您应该只获取最后一条记录,但根据您的要求,在变量var lastRecord=model.LastOrDefault()中获取最后一条记录是有意义的代码>或'var lastRecord=model[model.count-1];'。在这种情况下,你们不需要循环谢谢你们,但是mjwills的建议非常有效,@mjwills你们可以发布你们的解决方案来回答我可以接受吗?因为模型中没有对GetEnumerator@Exact,发布型号的类型,因此,您正在从控制器传递单个实例或列表?我传递了一个实例,如果您想了解控制器的工作方式,我可以为您发布控制器代码,但我已经使用Model.Reverse()解决了问题。Take(1))该模型不包含GetEnumeratorinumureble的公共定义,您可以使用它,然后可以循环使用上面提到的方法,或者像@model那样使用“您的viewmodel”您的viewmodel将包含对象属性列表,您需要遍历该列表并获取最后一条记录感谢您的帮助,但我找到了解决方案,我必须使用Model.Reverse()。获取(1)但没有列表如何获取Reverse和获取1?此方法太过冗余。无需反复调用LastOrDefault(),因为您意识到可能要多次调用“LastOrDefault”,该函数可能已缓存在一个变量中。该模型不包含GetEnumerator的公共定义,我找到了解决方案,我必须使用model.Reverse()。Take(1))请问您的模型是哪种类型的?
@foreach (var item in Model)
@foreach (var item in Model.Reverse().Take(1))
var Bestellung = db.Bestellungs.OrderByDescending(p => p.BestellungId ).FirstOrDefault();