0

这是场景 - 使用带有 jquery mobile 的 asp.net MVC - 两者都是新手

问题:后退按钮向使用POST创建的页面发送GET

设想:

  1. 第 1 页有一个搜索框和提交按钮 - clck submit 会POST到第 2 页。
  2. 第 2 页有搜索结果链接列表,单击搜索结果,转到第 3 页
  3. 单击第 3 页上的返回按钮,它会将GET发送到第 2 页。

在 Safari 和 Firefox 上试过。Firebug 在后退按钮上显示 GET。

这很常见吗?你会如何处理这个问题?

A)提交表单时,以某种方式将文本框添加到 URL(听起来很棘手)

B) 同时使用 HTTPPost 和 HTTPGet 标记搜索页面操作?然后将搜索文本保存在会话中或某处?

C) 有更好的选择吗?

任何建议表示赞赏!

4

2 回答 2

0

听起来您希望第 1 页和第 2 页具有相同的 url,并且本质上是“回发”到第一页,这样如果您向后退,您就会回到第一个原始未发布的页面。

您可以通过使用 [HttpPost] 和 [HttpGet] 属性来实现此目的

在您的控制器中,您可以拥有这个

[HttpGet]
public ActionResult Search()
{
   //action result get code
}

[HttpPost]
public ActionResult Search()
{
   //your result post code here
}
于 2012-12-06T01:57:04.247 回答
0

我认为可能以错误的方式处理了这个问题。一般来说,POST 应该用于可能修改服务器上的状态(更新数据库等)的请求,而 GET 应该用于只读操作。

在这种情况下,它是只读操作,因此 HTTP Get 是要使用的正确 http 动词。假设您正在使用 Razor,您的表单操作看起来像

@using(Html.BeginForm("Index", "Search", FormMethod.Get))
//generates an url like /search?q=searchterm
于 2012-12-06T02:02:10.130 回答