Frage

Ich bin ziemlich neu in MVC so dass diese wie eine offensichtlichen Frage erscheinen, aber wenn Buchung auf meine Action, wird die Action genannt, aber die Ansicht ändert sich nicht.

Was ich tue, ist eine einfache Suche Seite mit dem ein Benutzer der Datenbank suchen und die Ergebnisse werden zurückgegeben und Paginierung.

Hier ist Javascript, dass Anrufe, dass Action in meinem Controller.

    function SubmitSearch() {

    var searchBox = document.getElementById('searchBox');

    $.post("MyController/SearchResults/",
    {
        searchString: searchBox.value,
        page: 0
    });

    window.location = "../DriverStudio/Drivers/SearchResults/" + searchBox.value + '/0';
}

Meine aktuelle Lösung (was für eine schreckliche Hack) ist die .post $ auszukommen (da mein Weg ist so eingerichtet, wo die window.location die SearchResutls Action nennen) und stellen Sie die window.location zu dem, was der Benutzer gesucht, 0 ab Seite.

Es muss ein besserer Weg sein. Was soll ich tun?

War es hilfreich?

Lösung

Richten Sie Ihre Search Aktion eine Teilansicht zurückzukehren nur den Teil der Seite enthält, aktualisiert werden, wenn die Suche durchgeführt wird. Dieses Stück sollte in einem gewissen Behälter enthalten sein, so dass es leicht zu ersetzen. Dann nutzen Sie den Callback-Mechanismus auf der post-Methode den Inhalt des DIV mit dem Teilansicht resultiert aus Ihrer Search Aktion zurück zu ersetzen. Return false von Ihrem Handler aus dem Standard einreichen Aktion zu stoppen genommen zu werden.

function SubmitSearch() { 

    var searchBox = $('#searchBox'); 

    $.post("MyController/SearchResults/", 
    { 
        searchString: searchBox.val(), 
        page: 0 
    }, function(data) {
        $('#searchResults').html( data );
    }); 

    return false;
}

Dies setzt eine gewisse Ansicht Code, der in etwa so aussieht:

 <% using (Html.BeginForm()) { %
      <label for="searchBox">Search:</label>
      <%= Html.TextBox("searchBox") %>
 <% } %>
 <div id="searchResults">
 </div>

Andere Tipps

Ich bin nicht vertraut mit MVC, aber was macht Ihr Action tun andere als Umleitung der Benutzer zu dieser URL Sie in window.location haben?

Sie müssen wahrscheinlich einen Rückruf implementieren, von jQuery docs :

 jQuery.post( url, data, callback, type )

Sie sind also vorbei die URL und die Daten, aber nichts über das, was Sie mit den zurückgegebenen Daten tun möchten.

 $.post( "MyController/SearchResults/", 
         {searchString: searchBox.value,page: 0},
         function(result){
                //do something with what your actionresult returns here
                window.location = result.url;
         }
       );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top