3

我有一个网址:

装运/搜索/{searchType}/{searchValue}

和一个控制器动作:

// ShipmentSearchType is an enum ... PartNumber, CustomerOrder, etc...
ActionResult Search(ShipmentSearchType searchType, string searchValue)

所以这意味着我可以输入漂亮的网址,例如:

装运/搜索/零件编号/Widget-01

并获取具有该零件编号的所有货物的清单。

现在,我正在忙于应用程序的工作,并且到了我正在制作一个要求零件号的搜索表单并将其发回搜索的地步。所以基本上我想要:

装运/搜索/零件编号/{user-input-from-textbox}

不幸的是,我无法通过表单访问上述网址——它必须在服务器端生成。因此,我将使用 {user-input} 作为发布请求值将表单发布回 Shipment/Search/PartNumber。

所以我最终得到:

[AcceptVerbs(HttpVerbs.Post)]
ActionResult Search(ShipmentSearchType searchType, string searchValue, bool? post)
{
    return RedirectToAction("Search", new { searchType = searchType, searchValue = searchValue});
}

2件事:

1)有没有一种方法可以让我不用在客户端使用 javascript 就可以使用 Search 的 post 方法?

2)布尔?邮政价值在那里,所以他们有不同的签名。这显然是丑陋的。有没有更聪明的方法来做到这一点?

谢谢!

编辑:

“不幸的是,我认为我不能从表单中做到这一点(至少没有 javascript)。” &“有没有一种方法可以让我在不使用 javascript 的情况下绕过帖子?”

这有点模棱两可。我的意思是我不认为我可以让表单生成 url /Shipment/Search/PartNumber/{value-from-textbox} 并将其提供给表单方法获取。我认为这在 javascript 中很简单(覆盖提交操作以动态构建 url),但我没有这样做。我并不是说 javascript 是发布帖子所必需的。

4

1 回答 1

6

我有同样的情况,但没有 javascript 它工作正常,我只是在 [post]Search 中收到 FormCollections,然后重定向到这样的操作:

[AcceptVerbs(HttpVerbs.Post)]
ActionResult Search(FormCollection form)
{    return RedirectToAction("Search", new { searchType = form["searchType"], searchValue = form["searchValue"]}); }

我认为这是一个很好的解决方案,因为我观看了有关 Post-Redirect-Get 模式的视频 - asp.net mvc 应用程序中的良好实践。

于 2009-04-27T15:35:05.937 回答