通过List在MVC中一次显示一条记录

时间:2015-10-11 08:46:28

标签: linq asp.net-mvc-4

我有5条来自简单选择存储过程的记录。

ID Name
1  RecordOne
2  RecordTwo
3  RecordThree
4  RecordFour
5. RecordFive

要求是一次显示一条记录示例:

记录一次

上一页下一页

两个带有上一个和下一个文本的动作链接或按钮。 如果用户单击“下一步”,则用户将看到

RecordTwo

等,与之前的案例相同。

我的模特

namespace MVCLearning.Models

{

public class VMNews
{
    public List<Student> StudentDetails { get; set; }
}

public class Student
{
    public int ID { get; set; }
    public string Name { get; set; }

}
 }

行动

 public ActionResult Index()
    {
        VMNews objnews = new VMNews();
        objnews.StudentDetails = db.Database.SqlQuery<Student>("usp_studentdetails").ToList();
        return View(objnews);
    }

查看

<div>
@foreach (var item in Model.SD.Take(1))
{
    <h3>@item.Name</h3>
    <h3>@item.Age</h3>

}
@Html.ActionLink("Next", "index", new { Model.SD[0].ID})
@Html.ActionLink("Previous", "index", new { Model.SD[0].ID })            

我编写视图的方式是完全错误的,我没有知道如何以及在该视图上写什么以及在View上写什么。

实现这一目标的方法之一。

1 个答案:

答案 0 :(得分:2)

将方法改为

public ActionResult Index(int? index)
{
  int max = 5; // modify based on the actual number of records

  int currentIndex = index.GetValueOrDefault();
  if (currentIndex == 0)
  {
    ViewBag.NextIndex = 1;
  }
  else if (currentIndex >= max)
  {
    currentIndex = max;
    ViewBag.PreviousIndex = currentIndex - 1;
  }
  else
  {
    ViewBag.PreviousIndex = currentIndex - 1;
    ViewBag.NextIndex = currentIndex + 1;
  }

  VMNews objnews = new VMNews();
  Student model = db.Database.SqlQuery<Student>("usp_studentdetails")
    .Skip(currentIndex).Take(1).FirstOrDefault();

  return View(model);
}

请注意,该查询已被修改为仅返回一个Student,因为这是您在视图中所需的全部内容。此外,如果用户输入的值大于将返回最后一条记录的记录数(我可能实际上想要抛出错误?),我已经说过了。

视图现在需要

@model Student

<h3>@Model.Name</h3>
<h3>@Model.Age</h3>

@if (ViewBag.PreviousIndex != null)
{
  @Html.ActionLink("Previous", "Index", new { index = ViewBag.PreviousIndex })
}
@if (ViewBag.NextIndex != null)
{
  @Html.ActionLink("Next", "Index", new { index = ViewBag.NextIndex })
}