2017-05-30 5 views
0

Ich mag würde eine Tabelle in meiner Anwendung, die die Ergebnisse einer Suche zurückgibt. Ich habe zwei UI-Komponenten, die dabei helfen. Einer, eine Texteingabe, die als Suchbegriff eines und zwei, eine Suche nach Drop-Down-Menü dient, die letztlich, was Tabelle Datenbank bestimmt abzufragen.ASP.NET - Verwenden von Teilansichten zu Asynchron Suchen Ergebnisse anzeigen Tabelle

Mein Controller ist als HttpGet konfiguriert, um die Parameter searchBy und searchString zu akzeptieren. Wenn Suche nach "Option1" ist, wird "Tabelle 1" abgefragt, wenn searchBy "Option2" ist und "Tabelle2" abfragt. Ich möchte dann eine Teilansicht auf die Hauptansicht ohne eine Aktualisierung zurückgeben. Ich habe dies derzeit so eingerichtet, dass ich zwei verschiedene Modelle und zwei verschiedene Teilansichten habe, die jeweils miteinander verbunden sind. Der Plan ist, AJAX zu verwenden, um ein "GET" an die Controller-Aktion mit den entsprechenden Parametern zu senden.

Wie verwende ich Rasierer Syntax in der Hauptansicht, so dass es verarbeiten kann entweder Teilansicht zurückgegeben werden?

-Controller

[HttpGet] 
    public async Task<ActionResult> Table(string searchBy, string searchString) 
    { 

     switch (searchBy) 
     { 
      case "Option 1": 
       List<model1> Model1 = new List<model1>(); 
       var blah = from a in db.Table1 a; 
       blah = blah.Where(a => a.propA.Contains(searchString) 
            || a.propB.Contains(searchString)); 

       foreach (var a in blah) 
       { 
        Model1.Add(new model1 {...... }); 
       } 

       return PartialView("_PartialView1", Model1); 

      case "Option2": 
       List<model2> Model2 = new List<model2>(); 
       var foo = from p in db.Table2 select p; 
       foo = foo.Where(p => p.propC.Contains(searchString) 
            || p.propD.Contains(searchString) 
            || p.propE.Contains(searchString) 

       foreach (var p in foo) 
       { 
        Model2.Add(new mode2 { .... }); 
       } 

       return PartialView("_PartialView2", Model2); 

      default: 
       return PartialView("_DefaultPartialView"); 

     } 
    } 

enter image description here

Antwort

1

Da Sie einen AJAX-Aufruf machen, wird Ihre Hauptansicht haben keine Razor-Syntax zur Ausgabe Ihrer Teilansicht. Ihr AJAX-Aufruf wird nur ein paar gerenderte HTML zurückgeben (ein langen Zeichenfolge - Ihr Teil fusioniert mit Ihrem Modell), die Sie gerade brauchen irgendwo auf Ihrer Seite zu entleeren.

So beantworten Sie Ihre Frage Wie verwende ich Rasierersyntax in der Hauptansicht, so dass es entweder Teilansicht zurückgegeben werden kann? Sie werden nicht Razor für diese Aufgabe verwenden.

Sie erhalten einen Anruf an die Controller-Aktion über JavaScript werden machen, und das Gespräch wird HTML zurück, die Sie in einem vordefinierten Bereich Dump wird.

jQuery verwenden, es könnte wie folgt aussehen:

JavaScript:

$.get('/Home/Table', { searchBy : 'Option 1', searchString : 'test' }, function(partialView) { 
    $('#output').html(partialView); 
}); 

Hauptansicht:

<div id="output"></div> 
Verwandte Themen