2017-04-23 2 views
0

Ich versuche die Suche in meiner MVC-Webanwendung zu implementieren. Während meine Suchergebnisse basierend auf der Texteingabe korrekt gefiltert werden, filtern meine Ergebnisse nicht basierend auf Datumskriterien/Optionsfeldauswahl. Mein Code ist unten.C# - Parameter Fehler/Suchergebnisse unvollständig

Controller:

public ActionResult Index(string SearchString, int? daysBack) 
    { 

     var query = from t in db.Transactions 
        select t; 

     // List of Transactions 
     List<Transaction> SelectedTransactions = new List<Transaction>(); 

     ViewBag.NumberAllTransactions = db.Transactions.Count(); 

     if (SearchString == "" || SearchString == null) 
     { 
      // Display/add to view bag 
      ViewBag.NumberSelectedTransactions = db.Transactions.ToList().Count; 

      // Display list 
      return View(db.Transactions.ToList()); 

     } 
     else 
     { 
      // Select Transactions searched for 
      SelectedTransactions = db.Transactions.Where(t => t.TransactionDescription.Contains(SearchString)).ToList(); 
      // Display/add to view bag 
      ViewBag.NumberSelectedTransactions = SelectedTransactions.ToList().Count; 
      // Sort list 
      SelectedTransactions.OrderBy(t => t.TransactionDate).ThenBy(t => t.TransactionType).ThenBy(t => t.TransactionDescription); 
      // Display list 
     } 

     // Transaction Date 
     if (daysBack == 0) 
     { 
      // Display/add to view bag 
      ViewBag.NumberSelectedTransactions = db.Transactions.ToList().Count; 

      // Display list 
      return View(db.Transactions.ToList()); 
     } 
     else 
     { 
      var oldestDate = (DateTime.Today).AddDays(Convert.ToDouble(daysBack) * -1); 

      query = from t in db.Transactions 
        where t.TransactionDate >= oldestDate 
        select t; 

     } 

     List<Transaction> NewSelectedTransactions = query.ToList(); 

     ViewBag.NumberAllTransactions = db.Transactions.ToList().Count(); 
     ViewBag.NumberSelectedTransactions = SelectedTransactions.Count; 


     return View(NewSelectedTransactions); 

Ausblick:

<p class="form-group"> 
    Search: @Html.TextBox("SearchString", null, new { @class = "form-control" }) <br /> 

    <div class="form-group"> 
     <div class="form-check"> 
      <p>Date</p> 
      <label class="form-check-label"> 
       @Html.RadioButton("daysBack", 15, new { @class = "form-check-input" }) Last 15 Days <br /> 
      </label> 
      <br /> 
      <label class="form-check-label"> 
       @Html.RadioButton("daysBack", 30, new { @class = "form-check-input" }) Last 30 Days 
      </label> 
      <br /> 
      <label class="form-check-label"> 
       @Html.RadioButton("daysBack", 60, new { @class = "form-check-input" }) Last 60 Days 
      </label> 
     </div> 
    </div> 

Warum ist es, dass, wenn ich ein Optionsfeld zu suchen, wählen Sie, es nicht zu meinen Suchergebnissen führt wird, zu Terminen eingrenzen innerhalb der relevante Bereich?

+0

Wird die Seite zurückgesendet, wenn Sie das Optionsfeld auswählen? Werden irgendwelche Ergebnisse angezeigt? Welche Werte werden an den Controller übergeben? Sie müssen mehr Informationen zum tatsächlichen Verhalten als zum erwarteten Verhalten bereitstellen. –

+0

Alles hier sieht für mich richtig aus. Haben Sie überprüft, dass die Tage rückgängig gemacht werden? Haben Sie überprüft, ob die Ergebnisse von TransactionDate die erwarteten Ergebnisse sind? –

+0

Die Seite wird zurückgesendet, scheint aber nichts mit dem ausgewählten Optionsfeld zu tun (ich bin mir also nicht sicher, ob daysBack richtig übergeben wird). Wenn ich zum Beispiel "Letzte 15 Tage" auswähle, werden meine Ergebnisse immer noch mit einer Transaktion vom 18.04.2017 (gültig) und einer Transaktion vom 24.02.2017 (ungültig) zurückgegeben. Dies sind derzeit die einzigen zwei Datensätze in meiner Datenbank, aber nur der 4/18-Datensatz sollte zurückkommen, wenn Letzte 15 ausgewählt ist. – CodeFrog

Antwort

0

War ein Problem mit meinen Abfragen ... Mir fehlte eine LINQ Where-Klausel, die verhinderte, dass der Datumsbegrenzer wirksam wurde.

Verwandte Themen