2017-10-04 4 views
-1

Ich verwende Razorview und Entity Framework und versuche Folgendes zu erreichen: Ich habe ein Dropdown (id = ColumnName), das eine Liste von Spaltennamen und a enthält Textfeld (id = SearchValue) für den zu suchenden Wert aus einer Tabelle. Auf Knopfdruck lade ich die relevanten Daten aus der Datenbank ab (der Datensatz, in dem der Spaltenname "ColumnName" ausgewählt ist und value = 'SearchValue'). Das funktioniert gut, aber wenn ich die relevanten Daten zurückbekomme, verliere ich den ausgewählten 'SearchValue' und 'ColumnName'. Ich bin mir nicht sicher, wie ich den ausgewählten Wert speichern und eingeben kann und bekomme nur die relevanten Daten in der Tabelle zurück. Mein Code ist wie folgt:Tabelle nach individueller Spaltensuche anzeigen: Suchfeld und Wert beibehalten

HTML:

<select id='mySelector' name="ColumnName"> 
     <option value="">Please Select</option> 
     <option value='Country'>Country</option> 
     <option value='Title'>Title</option> 
     <option value='State'>State</option> 
    </select> 
    <input type="text" id="cs" name="SearchValue"> 
    <input type="button" value="Search" onclick="location.href='@Url.Action("FilterByColumn", "CountryController")?SearchValue=' + document.getElementById('cs').value + '&ColumnName=' +document.getElementById('mySelector').value" /> 
    <table id='myTable'> 
    // values 
    </table> 

CountryController:

public ActionResult FilterByColumn(String ColumnName, String SearchValue) 
{ 

    if (!String.IsNullOrEmpty(SearchValue)) 
    { 
     List<Country> result = new List<Country>(); 
     result = db.Countries.ToList(); 
     result = db.Countries.Where(ColumnName + ".Contains" + "(\"" + SearchValue.ToLower() + "\")").ToList(); 
     return View(result); 
    } 
    return RedirectToAction("Index"); 
} 

Anmerkung: Ich habe andere Methoden wie erstellen, bearbeiten in diesem Controller.

+0

so, wie ich es tun, ist die Verwendung jquery Suchwert in ein verstecktes Feld einfügen und dann sicherzustellen, dass ich gehe, dass mit ViewBag zu der Ansicht zurück. Dies hält Informationen aus der URL heraus, die Ihre Datenbank später der Injektion aussetzen könnten. – Danimal

+0

Sie können auch ajax verwenden, um nur die Daten zu aktualisieren, die aktualisiert werden sollen, wobei alle vorherigen Seitendaten beibehalten werden. – Danimal

+0

@Danimal: Würdest du das mit einem Beispiel erklären können? – user7221204

Antwort

1

Ich ging voran und machte das searchvalue Rasiermesserbeispiel, Sie würden gerade die richtigen Rasiermesserelemente für das columname tun müssen, das ein vorgewählter Einzelteil, wieder viele Tutorials online war.

<form id="myform" action="FilterByColumn" method="post"> 
<select id='mySelector' name="ColumnName"> 
    <option value="">Please Select</option> 
    <option value='Country'>Country</option> 
    <option value='Title'>Title</option> 
    <option value='State'>State</option> 
</select> 
@if (ViewBag.searchval != ""){ 
@Html.Raw ('<input type='text' id='cs' name='SearchValue' value="[email protected]val+">"); 
} 
else 
{ 
@Html.Raw ('<input type="text" id="cs" name='SearchValue'>"); 
} 
<input type="submit" value="Search" /> 
</form> 
<table id='myTable'> 
// values 
</table> 

CountryController:

public ActionResult FilterByColumn(String ColumnName) 
     { 
      ViewBag.searchval = ""; 
      string SearchValue = Request.Form["SearchValue"]; 
      if (SearchValue != "") 
      { 
       List<Country> result = new List<Country>(); 
       result = db.Countries.ToList(); 
       result = db.Countries.Where(ColumnName + ".Contains" + "(\"" + SearchValue.ToLower() + "\")").ToList(); 
       ViewBag.searchval = SearchValue; 
       return View(result); 
      } 
      return RedirectToAction("Index"); 
     } 
+0

Danke für Ihre Hilfe Antworten. Allerdings meine Zeichenfolge SearchValue = Request.Form ["SearchValue"]; erhält einen Nullwert, obwohl ich etwas in das Suchfeld eintippe. – user7221204

+0

Ich nahm an, dass Sie form tags verwendet oder? – Danimal

+0

Nichts wird ohne eine Post-Methode posten, ich nahm an, dass Sie Form-Tags nach dem Blick auf Ihren Code oben verwendet habe, habe ich festgestellt, Sie nicht habe ich über und unter den Formularelementen hinzugefügt die Aktion könnte anders sein, wenn Ihre Seite nicht in der CountryController ist Möglicherweise müssen Sie action = "CountryController/FilterByColumn – Danimal

Verwandte Themen