2016-08-03 89 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); 
相關問題