如何只显示ASP MVC视图中的最后一条记录

时间:2017-10-10 12:18:28

标签: c# sql-server asp.net-mvc stored-procedures

我正在使用存储过程(没有实体框架)开发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>

        } } 

Model Bestellung.cs:

public class Bestellung
{
    public int BestellungId { get; set; }

    [Required]
    public DateTime Date { get; set; }

    [Required]
    public string Time { get; set; }

    public int Nbre_P { get; set; }

    public string Items { get; set; }

    [Display(Name = "Phone Number")]
    [DataType(DataType.PhoneNumber)]
    [Required(ErrorMessage = "Phone is required.")]
    [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Entered phone format is not valid.")]
    public String Phone { get; set; }

    [Display(Name = "Email")]
    [EmailAddress(ErrorMessage = "Invalid Email Address")]
    [Required(ErrorMessage = "Email is required.")]
    [DataType(DataType.EmailAddress)]
    [StringLength(30)]
    public string Email { get; set; }


    [Display(Name = "First Name")]
    [Required(ErrorMessage = "First name is required.")]
    [StringLength(30)]
    public string FirstName { get; set; }

    [Display(Name = "Last Name")]
    [Required(ErrorMessage = "Last name is required.")]
    [StringLength(30)]
    public string LastName { get; set; }

    [Display(Name = "Address")]
    [Required(ErrorMessage = "Address is required.")]
    [StringLength(30)]
    public string Address { get; set; }
}

6 个答案:

答案 0 :(得分:1)

一种可能的解决方案是改变:

@foreach (var item in Model)

为:

@foreach (var item in Model.Reverse().Take(1))

这仍保留循环结构(即foreach),但确保它只处理原始Model中的最后一项。

答案 1 :(得分:0)

考虑到Model属于IEnumerable<T>类型,不确定为什么不能使用返回最后一个元素的LINQ Last()方法

答案 2 :(得分:0)

你不想这样做。

如果你在视图中过滤它,这是可能的,但我不推荐它,你可以加载整个列表模型项。你为什么要这么做?

控制器的任务是过滤您的数据并仅发送所需的项目。 在控制器调用中

Model.LastOrDefault();

答案 3 :(得分:0)

如果只想显示最后一条记录,而又不想从我的数据库中获取所有数据。 您可以使用此:

在控制器中:

var Bestellung = db.Bestellungs.OrderByDescending(p => p.BestellungId ).FirstOrDefault();

将为您提供Bestellungs的最新唱片

答案 4 :(得分:-1)

试试这个。不需要迭代任何循环

s <= func(n);

答案 5 :(得分:-3)

你的模型应该是modelobject的列表,而不仅仅是模型 最好将对象存储在像

这样的对象列表中
  class viewmodel
  {
      public  list<yourclassname> propertyname; 
  }

并在视图页面中使用此viewmodel类

@foreach(var item in Model.PropertyName.lastordefault())