Вопрос

Я новичок в 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.

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

Это было полезно?

Решение

Настройте действие 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>

Другие советы

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

Вероятно, вам нужно реализовать обратный вызов из документация jQuery:

 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;
         }
       );
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top