2016-08-03 68 views
1

我在我的MVC应用程序中创建了一个非常简单的搜索表单,该表单允许用户搜索字符串字词并返回结果。我想让我的用户在两个日期之间搜索,但我不知道如何编程。如何使用c在两个日期之间搜索#

这是我的代码到目前为止。正如你会注意到的,这只是为了搜索传入控制器的字符串作为参数。我已经开始为日期选择器编写代码,但是我陷入了困境。

查看

<h2>Search</h2> 
@using (Ajax.BeginForm("Search", "Search", new AjaxOptions 
{ 
    OnSuccess = "Success", 
    OnFailure = "Failure", 
    UpdateTargetId = "test", 
    InsertionMode = InsertionMode.Replace 
})) 
{ 
<table class="table"> 
    <tr> 
     <td><label>Vessel Name</label></td> 
     <td>@Html.TextBox("term",null, new { @class = "k-textbox" })</td> 
    </tr> 
    <tr> 
     <td> 
      <label>From</label> 
      @(Html.Kendo().DatePicker() 
       .Name("date_from") 
       .Value(DateTime.Today) 
       ) 
     </td> 
     <td> 
      <label>To</label> 
      @(Html.Kendo().DatePicker() 
       .Name("date_to") 
       .Value(DateTime.Today)   
      ) 
     </td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
      <input type="submit" value="Search" /> 
     </td> 
    </tr>   
</table>  
} 

<table class="table"> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>Location</th> 
      <th>MMSI</th> 
      <th>Created</th> 
     </tr> 
    </thead> 
    <tbody id="test"> 
     @Html.Partial("_results")  
    </tbody> 
</table> 

控制器

public ActionResult Search(string term, DateTime date_from, DateTime date_to) 
    { 
     var vessels = (from o in db.vessels 
         select o); 

     if (!String.IsNullOrEmpty(term)) 
     { 
      vessels = vessels.Where(s => 
       s.vessel_name.Contains(term) || 
       s.vessel_location.Contains(term) || 
       s.vessel_mmsi.Contains(term)); 
     }    
     return PartialView("_results", vessels); 
    } 

局部视图 由于我使用AJAX来更新目标ID我使用返回的结果作为一个局部视图'替换'插入方法。

@model IEnumerable<Multiple_Table_Post.Models.vessel> 
@foreach (var item in Model) 
{ 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.vessel_name) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.vessel_location) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.vessel_mmsi) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.created) 
    </td> 
</tr> 
} 

正如你会发现我已经开始落实提供日期选取器,但我不知道如何写C#的,让我给他们之间的搜索。我将它们作为日期时间参数传递给方法,但之后是完全卡住的地方。

非常感谢

+0

您可以添加所有这些可怕的事情见过(例如[tag:ajax])作为标签?标题听起来很容易,但它不适合我。 – Sinatr

回答

1

您可以在任何显示的LINQ查询中执行此操作。

var vessels= (from o in db.vessels 
where (o.created>= date_from && o.created<= date_to) 
select o);//I have not tested this. 

更多信息:

C# Linq Where Date Between 2 Dates

还可以过滤在第二LINQ查询的日期作为其他的答案

+1

谢谢,这实际上很好,干净,简单。我过于复杂了。这工作完美。 – Yanayaya

0
var vessels = (from o in db.vessels 
       where o.vessel_date => date_from 
        && o.vessel_date =< date_to 
        && ( term==null 
          || o.vessel_name.Contains(term) 
          && o.vessel_location.Contains(term) 
          && o.vessel_mmsi.Contains(term)) 
       select o); 
相关问题