使用日期搜索详细信息

时间:2015-03-11 05:22:04

标签: c# asp.net-mvc asp.net-mvc-4

我想使用日期搜索详细信息,它不起作用,但按名称搜索有效。

我的控制器代码:

public ActionResult ProjectReport(string searchstring)
{
    using (db)
    {
       // var v = db.Projects.ToList();
        var Projects = from p in db.Projects
                       select p;
        if (!String.IsNullOrEmpty(searchstring))
        {
            Projects = Projects.Where(p => p.ProjectTitle.Contains(searchstring));
        }
        var dateFilter = Convert.ToString(Request["sSearch_3"]);
        if (dateFilter.Contains('~'))
        {
            //Split date range filters with ~
            DateTime = dateFilter.Split('~')[0] == "" ?
            DateTime.MinValue : Convert.ToDateTime(dateFilter.Split('~')[0]);

        }
        return View(Projects.ToList());
    }
}

1 个答案:

答案 0 :(得分:1)

使用参数DateTime searchDate而不是使用字符串。鉴于您的列也是日期或日期时间对象,您可以立即过滤它。

更新:(查看评论后) 如果Projects中的ActualSDate是datetime列。即Projects类的定义是这样的

public class Projects {
  public DateTime ActualSDate { get; set; }
  //other properties
}
控制器中的

public ActionResult ProjectReport(DateTime searchDate)
{
  var projects = db.Projects
    .Where(c=>c.ActualSDate == searchDate)
    .ToList();
  return View(projects);
}
在视图中

您必须确保输入具有属性名称" searchDate"如果这是一个HttpPost,格式是正确的日期格式,或者如果这是一个HttpGet,则用正确的日期格式提供参数

更新2: 你没有解释为什么它不起作用。也许日期字符串不匹配,无论如何这是我在项目中做过多次,最小版本

查看

@{
  var fromDate = (DateTime)ViewBag.fromDate;
  var toDate = (DateTime)ViewBag.toDate;
}

@using (Html.BeginForm("Action_Name", "Controller_Name", FormMethod.Get)) {
  <div>From Date: @Html.TextBox("fromDate", string.Format("{0:dd MMM yyy}", fromDate), new { @class = "DatePicker" })</div>
  <div>To Date: @Html.TextBox("toDate", string.Format("{0:dd MMM yyy}", fromDate), new { @class = "DatePicker" })</div>
  <input type="submit" value="Search" />
}

在这里,正如您所看到的,我使用FormMethod.Get,因为此页面用作搜索页面/报告

在母版页上,我的jQuery DatePicker就像这样实例化了

<script type="text/javascript">
  $(document).ready(function () {
    $(".DatePicker").datepicker({
      dateFormat: 'dd M yy',
      changeMonth: true,
      changeYear: true,
     });
  });
 </script>

因此它符合我的书面日期格式,例如&#39; 2015年3月3日&#39;

在控制器中

public ActionResult ProjectReport(DateTime? fromDate, DateTime? toDate)
{
  if (!fromDate.HasValue) fromDate = DateTime.Now.Date;
  if (!toDate.HasValue) toDate = fromDate.GetValueOrDefault(DateTime.Now.Date).Date.AddDays(1);
  if (toDate < fromDate) toDate = fromDate.GetValueOrDefault(DateTime.Now.Date).Date.AddDays(1);
  ViewBag.fromDate = fromDate;
  ViewBag.toDate = toDate;

  var projects = db.Projects
    .Where(c=>c.ActualSDate >= fromDate && c.ActualSDate < toDate)
    .ToList();

  return View(projects);
}