我想使用日期搜索详细信息,它不起作用,但按名称搜索有效。
我的控制器代码:
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());
}
}
答案 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);
}