Pergunta

Eu sou muito novo no MVC, então isso pode parecer uma pergunta óbvia, mas ao postar no meu ActionResult, o ActionResult é chamado, mas a visão não muda.

O que estou fazendo é ter uma página de pesquisa básica na qual um usuário pode pesquisar meu banco de dados e os resultados são retornados e paginados.

Aqui está o JavaScript que chama esse ActionResult no meu controlador.

    function SubmitSearch() {

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

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

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

Minha solução atual (que é um hack horrível) é comentar o $ .Post (já que minha rota é configurada de uma maneira em que a janela. Pois, começando na página 0.

Tem que haver uma maneira melhor. O que devo fazer?

Foi útil?

Solução

Configure sua ação SearchResults para retornar uma visualização parcial contendo apenas a parte da página a ser atualizada quando a pesquisa for executada. Esta peça deve estar contida em algum recipiente, facilitando a substituição. Em seguida, use o mecanismo de retorno de chamada no método do post para substituir o conteúdo dessa div pelo resultado parcial de visualização retornado da sua ação de pesquisa. Retorne false do seu manipulador para impedir que a ação de enviar padrão seja tomada.

function SubmitSearch() { 

    var searchBox = $('#searchBox'); 

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

    return false;
}

Isso pressupõe algum código de exibição que se parece com:

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

Outras dicas

Não estou familiarizado com o MVC, mas o que seu ActionResult faz além de redirecionar o usuário para esse URL que você tem no Window.Location?

Você provavelmente precisa implementar um retorno de chamada, de JQuery Docs:

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

Então você está passando o URL e os dados, mas nada sobre o que você deseja fazer com os dados retornados.

 $.post( "MyController/SearchResults/", 
         {searchString: searchBox.value,page: 0},
         function(result){
                //do something with what your actionresult returns here
                window.location = result.url;
         }
       );
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top