Как вызвать контроллер с помощью нажатия кнопки без использования AJAX MVC - PullRequest
0 голосов
/ 03 марта 2010

Я новичок в веб-программировании в целом, так что это, вероятно, очень простой вопрос. Однако я ничего не нашел в Интернете.

Что я хочу сделать, так это вызвать мой контроллер с набранной строкой поиска, вернуть результаты из базы данных и разбить их на страницы. Прямо сейчас я использую функцию, которая вызывается при нажатии кнопки. Функция выглядит так:

function SubmitSearch() {

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

    $.post("MyController/MyAction/",
    {
        searchString: searchBox.value,
        page: null
    }, function(result) {
        $('#searchResults').html(result);
        searchButton.value = "Search";
    });
}

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

Проблема в том, что когда пользователь нажимает кнопку «Назад» браузера, страница возвращается в состояние до того, как был введен поиск, и это происходит из-за вызова ajax. Я хочу позвонить в контроллер и загрузить страницу, как в Google. Вместо использования PartialView я бы использовал View (мое предположение).

Как бы я назвал контроллер и получил страницу RELOAD с результатами. Я, должно быть, упускаю что-то фундаментальное, потому что это определенно кажется легким.

Ответы [ 3 ]

2 голосов
/ 03 марта 2010

Если вы не хотите использовать AJAX, вам нужно поместить свое текстовое поле в элемент формы на своей странице, что-то вроде:

<form action="MyController/MyAction/" method="get">
  <input id="SearchBox" name="SearchBox" type="text" />
  <button type="submit">Search</button>
</form>

Затем в вашем контроллере верните вид со списком результатов.

Возможно, вы также захотите просмотреть RESTful URL-адреса и шаблон PRG (Post, Redirect, Get) , чтобы сохранить целостность кнопки возврата и включить правильную закладку страниц и т. Д. .

1 голос
/ 03 марта 2010

Aspx:

<% using (Html.BeginForm<MyController>(m => m.MyAction(null)) { %> 
    <%= Html.TextBox("q"); %>
<% } %>
// Listing

Контроллер:

public class MyController : Controller
{
    public ActionResult MyAction(string q)
    {
        var repository; // instance of your repository.

        if (String.IsNullOrEmpty(q))
        {
            return View(repository.GetAllBlogs());
        }
        return View(repository.SearchBlogs(q));
    }
}
1 голос
/ 03 марта 2010

Я думаю, что вы, возможно, действительно ищете библиотеку AJAX History, которая поможет при нажатии кнопки «Назад» вместо изменения вашего приложения. Взгляните на это сообщение в блоге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...