0

一般来说,我是网络编程的新手,所以这可能是一个非常简单的问题。然而,我在网上找不到任何东西。

我想要做的是用键入的搜索字符串调用我的控制器并从数据库返回结果并对结果进行分页。现在我正在使用一个在按下按钮时调用的函数。该函数如下所示:

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";
    });
}

发生的情况是调用了我的控制器,并且我的 searchResults div 填充了结果并进行了分页。用户可以单击返回的任何搜索结果来查看详细信息。

问题是当用户单击浏览器的“返回”按钮时,页面返回到输入搜索之前的状态,这是因为 ajax 调用。我想要做的是,调用控制器并像谷歌一样加载页面。我不会使用 PartialView,而是使用 View(我的猜测)。

我将如何调用控制器并让页面重新加载结果。我一定错过了一些基本的东西,因为这绝对看起来应该很容易。

4

3 回答 3

2

如果您不想使用 AJAX,则需要将文本字段放在页面上的表单元素中,例如:

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

然后在您的控制器中返回带有结果列表的视图。

您可能还想研究RESTful URL 和PRG(发布、重定向、获取)模式,以保持后退按钮的完整性并启用正确的页面书签等。

于 2010-03-03T15:41:52.997 回答
1

我认为您实际上可能正在寻找一个 AJAX 历史库来帮助按下后退按钮而不是更改您的应用程序。看看这篇博文

于 2010-03-03T15:20:31.573 回答
1

ASP:

<% 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));
    }
}
于 2010-03-03T15:43:34.017 回答