C# 如何在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

我正在使用存储过程(没有实体框架)开发一个ASP MVC项目

在公式中设置数据后,我只想显示最后一条记录,而不是从数据库中获取所有数据

我知道我可以编写另一个只选择最后一条记录的方法,但我想知道是否有从视图中检索该记录的解决方案

这就是我所尝试的:

  @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();