2016-08-03 8 views
1

Ich habe ein sehr einfaches Suchformular in meiner MVC-Anwendung erstellt, die es dem Benutzer ermöglicht, nach einem String-Begriff zu suchen und die Ergebnisse zurückzugeben. Ich möchte meine Benutzer zwischen zwei Daten suchen lassen, aber ich bin mir nicht sicher, wie ich das programmieren würde.Wie suche ich zwischen zwei Daten mit C#

Hier ist mein Code so weit. Sie werden feststellen, dass dies nur für die Suche nach einem String gilt, der als Parameter an den Controller übergeben wird. Ich habe angefangen, den Code für die Datumsauswahl zu schreiben, aber ich bin stecken geblieben.

Ansicht

<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> 

-Controller

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); 
    } 

Teilansicht Da ich Ajax bin mit einem Ziel-ID zu aktualisieren, kehre ich die Ergebnisse wie in einer Teilansicht mit die Einfügemethode "Ersetzen".

@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> 
} 

Wie Sie werden bemerken, ich habe damit begonnen, die Datumsauswahl an Ort und Stelle setzen, aber ich weiß nicht, wie die C# zu schreiben, mich zwischen ihnen suchen zu ermöglichen. Ich übergebe sie als Datetime Parameter in die Methode, aber danach bin ich total festgefahren.

Vielen Dank

+0

Können Sie alle diese beängstigende Dinge hinzufügen (zB [tag: ajax]) als Tags? Der Titel klingt einfach, aber nicht für mich. – Sinatr

Antwort

1

Sie diese entweder in der LINQ tun könnte, fragt Sie gezeigt haben.

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

Mehr Info:

C# Linq Where Date Between 2 Dates

Sie können auch die Daten in der zweiten LINQ-Abfrage-Filter wie in den anderen Antworten gesehen

+1

Danke, das ist eigentlich nett, sauber und einfach. Ich war damit fertig, es zu verkomplizieren. Das funktioniert perfekt. – 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); 
Verwandte Themen