Pregunta

Soy bastante nuevo en MVC así que esto puede parecer una pregunta obvia, pero cuando anuncio a mi ActionResult, la ActionResult se llama, pero la visión no cambia.

Lo que estoy haciendo es tener una página básica de búsqueda donde un usuario puede buscar mi base de datos y los resultados se devuelven y paginado.

Aquí es javascript que las llamadas que ActionResult en mi controlador.

    function SubmitSearch() {

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

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

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

Mi solución actual (que es un horrible truco) es comentar el $ .post (ya que mi ruta está configurado de una manera en la window.location llamará al SearchResutls ActionResult) y establecer el window.location a lo el usuario busca, a partir de la página 0.

Tiene que haber una mejor manera. ¿Qué debo hacer?

¿Fue útil?

Solución

Configurar su acción SearchResults para devolver una vista parcial que contiene únicamente la parte de la página que se actualiza cuando se realiza la búsqueda. Esta pieza debe estar contenida en algunos contenedores, por lo que es fácil de reemplazar. A continuación, utilice el mecanismo de devolución de llamada en el procedimiento de después de reemplazar el contenido de ese DIV con el resultado vista parcial de regresar de su acción SearchResults. falsa regreso de su manejador por defecto para detener la acción de enviar de ser adoptadas.

function SubmitSearch() { 

    var searchBox = $('#searchBox'); 

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

    return false;
}

Esto supone un cierto código opinión de que se ve algo como:

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

Otros consejos

No estoy a familiarizarse con MVC, pero lo que hace su ActionResult hacer otra cosa que redirigir al usuario a la URL que tiene en window.location?

Es probable que necesita para implementar una devolución de llamada, desde jQuery docs :

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

Así que estás pasando la URL y los datos, pero nada acerca de lo que quiere hacer con los datos devueltos.

 $.post( "MyController/SearchResults/", 
         {searchString: searchBox.value,page: 0},
         function(result){
                //do something with what your actionresult returns here
                window.location = result.url;
         }
       );
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top