如何在不使用ajax mvc的情况下从按钮单击调用控制器

时间:2010-03-03 15:14:28

标签: asp.net-mvc button reload

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

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

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(我猜)。

如何调用控制器并使页面RELOAD显示结果。我必须遗漏一些基本的东西,因为这看起来应该很容易。

3 个答案:

答案 0 :(得分:2)

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

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

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

您可能还希望查看RESTful网址和PRG (Post, Redirect, Get)模式,以维护后退按钮的完整性并启用正确的网页书签等。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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