2010-03-03 73 views
0

我是一般的网络编程新手,所以这可能是一个非常简单的问题。但是我在网上找不到任何东西。如何从按钮点击调用控制器而不使用ajax mvc

我想要做的就是调用我的控制器与类型化的搜索字符串,并从数据库返回结果和分页结果。现在我正在使用按下按钮时调用的函数。该函数看起来像这样:

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与结果进行比较。我必须错过一些基本的东西,因为这看起来应该很容易。

回答

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

谢谢,我去了这个解决方案,除了我用的MVC方式(<%使用Html.BeginForm(“MyAction”,“MyController”){%> .... – Darcy 2010-03-03 16:35:29

1

我想你可能实际上正在寻找一个AJAX历史库来帮助当后退按钮被按下而不是改变你的应用程序。看看这个blog post

+0

我真的很想重新加载页面。在我的Action中,我有一些草率的编码来处理分页和搜索页面(我必须根据调用是否是ajax调用不同的视图[我的其他分页页面重新加载页面]) – Darcy 2010-03-03 15:29:24

+0

您主要的问题是你的例子不使用Ajax,因此很难复制。您的挑战是让“返回”操作返回到您的控制器,就好像标准和分页内的页面都触发了搜索一样。在后台使用db做这件事也会使返回的数据集自原始演示文稿以来发生变化,并且没有任何保证。 – Lazarus 2010-03-03 15:49:17

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)); 
    } 
} 
+0

http://weblogs.asp.net/scottgu请阅读/archive/2010/10/22/asp-net-mvc-3-layouts.aspx – Penguen 2011-12-20 21:25:16

相关问题