jQuery $ .Post não muda a visualização. O que eu faço?
-
22-09-2019 - |
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?
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;
}
);