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

ano*_*ous 3 asp.net-mvc routing url-routing

我有一个网址:

发货/搜索/ {检索类别}/{} searchValue

和控制器动作:

// ShipmentSearchType is an enum ... PartNumber, CustomerOrder, etc...
ActionResult Search(ShipmentSearchType searchType, string searchValue)
Run Code Online (Sandbox Code Playgroud)

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

发货/搜索/ PARTNUMBER /控件-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});
}
Run Code Online (Sandbox Code Playgroud)

2件事:

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

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

谢谢!

编辑:

"不幸的是,我认为我不能从表格中做到这一点(至少没有javascript)." &"有没有办法可以在不使用javascript的情况下获得帖子?"

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

Mak*_*yuk 6

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

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

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