ASP.NET MVC:表单输入到漂亮的URL

时间:2009-04-27 15:25:16

标签: asp.net-mvc routing url-routing

我有一个网址:

运费/搜索/ {检索类别} / {searchValue}

和控制器操作:

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

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

运费/搜索/部分号码/小工具-01

获取包含该部件号的所有货件清单。

现在我正忙着完成应用程序的工作,并且到了我正在编写一个要求部件号的搜索表单的位置,它将回发给搜索。所以基本上我想要:

运费/搜索/部分号码/ {用户输入从 - 文本框}

不幸的是我不能让表单到达上面的url - 它必须生成服务器端。因此,我会将表单发回到Shipment / Search / PartNumber,并将{user-input}作为发布请求值。

所以我最终得到了:

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

2件事:

1)有没有办法在不使用客户端的javascript的情况下使用搜索的post方法?

2)布尔?邮政价值只是因此他们有不同的签名。这显然是丑陋的。有更聪明的方法吗?

谢谢!

编辑:

“不幸的是,我认为我不能从表格中做到这一点(至少没有javascript)。” &安培; “有没有办法可以在不使用javascript的情况下发布帖子?”

这有点模棱两可。我的意思是我不认为我可以有一个表单生成url / Shipment / Search / PartNumber / {value-from-textbox}并将其赋予表单方法get。我认为这在javascript中很简单(覆盖提交动作以动态构建url)但我还没有这样做。我并不是说javascript是必要的。

1 个答案:

答案 0 :(得分:6)

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

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

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