从数据库获取特定年份的数据以在gridview中显示 - MVC

时间:2014-12-19 16:07:01

标签: asp.net-mvc asp.net-mvc-4 gridview

我在MVC项目中有一个gridview,它显示了一个表中的所有记录,但我想只显示当前年份的记录,而在点击向后或向前箭头时,记录会相应地改变到上一年或下一年。 我只有一个ActionResult Index返回一个列表如何在这里实现查询? 这是我的控制器中的代码

public ActionResult Index()
        {
            return View(db.tbl_HolidayList.ToList());
        }

这是我的观看代码

@foreach (var item in Model) {
        <tr>
           @* <td>
                @Html.TextBoxFor(modelItem => item.Holiday_Id, new { style = "display: none; width:170px; height:15px" })
                <div class="displaytext">
                    @Html.DisplayFor(modelItem => item.Holiday_Id)
                </div>
            </td>*@
            <td>
                @Html.TextBoxFor(modelItem => item.Holiday_Name, new { style = "display: none; width:170px; height:15px" })
                <div class="displaytext">
                    @Html.DisplayFor(modelItem => item.Holiday_Name)
                </div>
            </td>
            <td>
                @Html.TextBoxFor(modelItem => item.Holiday_Description, new { style = "display: none; width:170px; height:15px" })
                <div class="displaytext">
                    @Html.DisplayFor(modelItem => item.Holiday_Description)
                </div>
            </td>
            <td>
                @Html.TextBoxFor(modelItem => item.Holiday_date, new { style = "display: none; width:170px; height:15px" })
                <div class="displaytext">
                    @Html.DisplayFor(modelItem => item.Holiday_date)
                </div>
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.Holiday_Id }, new { @class = "lnkEdit" }) |
               @* @Html.ActionLink("Details", "Details", new { id = item.Holiday_Id}, new { @class = "lnkDetail" }) |*@
                @Html.ActionLink("Delete", "Delete", new { id = item.Holiday_Id![enter image description here][1] }, new { @class = "lnkDelete" })

enter image description here

3 个答案:

答案 0 :(得分:1)

让索引方法返回当前年份的值以及将特定年份的值作为部分视图返回的单独方法

Controller(假设为HolidaysController)

public ActionResult Index()
{
  return View();
}
public ActionResult Details(int year)
{
  var model = db.tbl_HolidayList.Where(h => h.Holiday_date.Year == year);
  return PartialView(model);
}

Index.cshtml

@{
  int year = DateTime.Today.Year;
}

<button type="button" id="previous">Previous</button>
<div id="year">@year</div>
<button type="button" id="next">Next</button>
<div id="details">
  @Html.Action("Details", "Holidays", new { id = year })
</div>

<script>
  var year = '@year';
  var url = '@Url.Action("Details", "Holidays")'; // Assumes the controller is HolidayController
  var updateHolidays = function() {
    $('#year').text(year);
    $('#details').load(url, { id: year });
  } 
  $('#previous').click(function() {
    year--;
    updateHolidays();
  }
  $('#next').click(function() {
    year++;
    updateHolidays;
  }

Details.cshtml(部分)

@model IEnumerable<tbl_HolidayList>
<table>
  ....
  <thead>
    @foreach (var item in Model)
    {
      <tr>
        <td>
          @Html.TextBoxFor(m => item.Holiday_Id, new { @class = "control", id = "" })
          ....
        </td>
        ....
      </tr>
    }
  </thead>
</table>

CSS

.control { // could be just input[type="text"] {
  display:none;
  height:15px;
  width: 100%; // style the column widths!
}

注意:使用类名称设置文本框样式(不是内联样式),并使用id = ""从文本框中删除id属性(否则您创建重复id&#39 ; s是无效的HTML)

答案 1 :(得分:0)

我会:

  • 更新您的Controller以获取(int year)参数并仅返回相应的数据(无需检索所有内容)
  • 创建包含表格的局部视图
  • 点击上一个/下一个,我会做一个jQuery ajax请求来检索数据(例如返回一个PartialViewResult)

答案 2 :(得分:0)

在这种情况下,我们不知道一年会有多少行。因此,更好地处理“上一个”和“下一个”按钮单击事件并触发一个AJAX调用,该调用调用Action方法来获取数据,然后刷新WebGrid的内容。

在进行AJAX调用时读取当前年份值并根据单击的按钮添加+1或-1。然后将其作为参数发送到Action方法(Action方法将是POST类型)...现在Action方法将过滤给定年份的数据并将其返回到视图。希望以下文章可能有助于实现这种情况:

http://www.4guysfromrolla.com/articles/121510-1.aspx

http://www.binaryintellect.net/articles/59b91531-3fb2-4504-84a4-9f52e2d65c20.aspx

感谢。