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?
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. –
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? –
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