JQuery $ .Post не меняет представление. Что я делаю? - PullRequest
1 голос
/ 25 февраля 2010

Я довольно новичок в MVC, так что это может показаться очевидным вопросом, но при публикации в моем ActionResult вызывается ActionResult, но представление не изменяется.

То, что я делаю, - это страница основного поиска, где пользователь может искать в моей базе данных, а результаты возвращаются и разбиваются на страницы.

Вот javascript, который вызывает ActionResult в моем контроллере.

    function SubmitSearch() {

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

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

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

Мое текущее решение (которое является ужасным взломом) - закомментировать $ .post (поскольку мой маршрут настроен так, что window.location будет вызывать SearchResutls ActionResult) и установить для window.location пользователь искал, начиная со страницы 0.

Должен быть лучший способ. Что мне делать?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2010

Я не знаком с MVC, но что делает ваш ActionResult, кроме перенаправления пользователя на тот URL-адрес, который у вас есть в window.location?

Возможно, вам необходимо реализовать обратный вызов из jQuery docs :

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

Итак, вы передаете URL и данные, но ничего не говорите о том, что вы хотите сделать с возвращенными данными.

 $.post( "MyController/SearchResults/", 
         {searchString: searchBox.value,page: 0},
         function(result){
                //do something with what your actionresult returns here
                window.location = result.url;
         }
       );
2 голосов
/ 25 февраля 2010

Настройте действие SearchResults, чтобы оно возвращало частичное представление, содержащее только часть страницы, которая будет обновлена ​​при выполнении поиска. Этот кусок должен содержаться в каком-то контейнере, что облегчает его замену. Затем используйте механизм обратного вызова в методе post, чтобы заменить содержимое этого DIV частичным результатом просмотра, возвращаемым из действия SearchResults. Верните false из вашего обработчика, чтобы остановить действие отправки по умолчанию.

function SubmitSearch() { 

    var searchBox = $('#searchBox'); 

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

    return false;
}

Предполагается, что некоторый код представления выглядит примерно так:

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