Wie kann ich eine Suchfunktionalität mit Teilansicht in asp.net mvc 4 erstellen

9

Ich verwende ASP.NET MVC 4 mit Entity-Framework-Modell zuerst.

In meiner "Masterpage.cshtml" möchte ich eine Teilansicht haben, die ein Textfeld und eine Schaltfläche enthält.

Die Suche sucht nach dem Titel des Elements. Wenn der Text einen Titel enthält, sollte er diese Elemente anzeigen.

Wenn ein Text gesendet wird, sollte @renderbody() eine Ansicht mit den Elementen anzeigen.

Meine Frage ist, wie kann ich das gut machen? Was ist ein guter und einfacher Ansatz?

Bisher habe ich das getan:

Eine Methode in meinem Repository erstellt, die die Suchfunktion ausführt:

%Vor%

Jetzt, wenn es zu meinem Searchcontroller kommt, habe ich irgendwie verloren, wie man das macht. Weil ein Actionresult die Teilansicht sein muss, die einen String-Abfrageparameter hat, und eine andere, die eine View enthält, die die Items anzeigt?

Was ich jetzt getan habe, ist, den ganzen Prozess in demselben Aktionsresultat zu haben:

%Vor%

jede Art von Hilfe wird sehr geschätzt!

    
Obsivus 19.05.2013, 17:27
quelle

1 Antwort

22

Sie könnten den folgenden Ansatz verwenden:

Index.cshtml

Haben Sie einen DIV, der die Such-Controller-Aktion aufruft, und einen anderen, der die Ergebnisse anzeigt.

%Vor%

_SearchFormPartial.cshtml

Erstellen Sie eine Teilansicht, die das Suchformular enthält. Sie können Ajax.BeginForm verwenden. Wenn ein Benutzer die Ergebnisse durchsucht, werden die Ergebnisse in der Datei search-results DIV in Index.cshtml von AJAX angezeigt. UpdateTargetId gibt an, dass die Ergebnisse der Suche an search-results DIV übergeben werden sollen.

%Vor%

In Ihrem Controller benötigen Sie eine Aktion, um das Formular anzuzeigen (Teilansicht oben) und eine weitere, um die Suchanfrage zu bearbeiten und eine weitere Teilansicht erneut zu senden, in der die Ergebnisse angezeigt werden:

%Vor%

_SearchResultsPartial.cshtml

Dieser Teil zeigt die Ergebnisse an. Es ist stark typisiert, ein ItemViewModel aufzunehmen.

%Vor%     
MattSull 19.05.2013, 20:38
quelle