Domanda

Sono abbastanza nuovo per MVC quindi questo può sembrare una domanda ovvia, ma quando la pubblicazione alla mia ActionResult, l'ActionResult viene chiamato, ma la vista non cambia.

Quello che sto facendo sta avendo una pagina di ricerca di base in cui un utente può cercare il mio database ei risultati vengono restituiti e impaginato.

Ecco javascript che chiama che ActionResult nel mio controller.

    function SubmitSearch() {

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

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

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

La mia soluzione attuale (che è un orribile hack) è quello di commentare la $ .post (dato che il mio percorso è impostato in modo in cui il window.location chiamerà il SearchResutls ActionResult) e impostare il window.location a ciò l'utente ha cercato, a partire da pagina 0.

Ci deve essere un modo migliore. Cosa devo fare?

È stato utile?

Soluzione

Impostare la vostra azione SearchResults per restituire una vista parziale contenente solo la parte della pagina per essere aggiornato quando viene eseguita la ricerca. Questo pezzo deve essere contenuto in un recipiente, che la rende facile da sostituire. Quindi utilizzare il meccanismo di richiamata sul metodo post per sostituire il contenuto di tale DIV con il risultato parziale vista restituito dal azione SearchResults. Return false dal vostro gestore di fermare l'azione di invio di default sia preso.

function SubmitSearch() { 

    var searchBox = $('#searchBox'); 

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

    return false;
}

Questo presuppone un codice opinione che sembra qualcosa di simile:

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

Altri suggerimenti

Io non sono a familiarità con MVC, ma che cosa fa il tuo ActionResult fare altro che reindirizzare l'utente a tale URL avete in window.location?

Probabilmente è necessario implementare una funzione di callback, da jQuery documentazione :

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

Quindi, si sta passando l'URL e dei dati, ma nulla di ciò che si vuole fare con i dati restituiti.

 $.post( "MyController/SearchResults/", 
         {searchString: searchBox.value,page: 0},
         function(result){
                //do something with what your actionresult returns here
                window.location = result.url;
         }
       );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top