GET请求路由参数

时间:2011-06-10 12:13:05

标签: asp.net-mvc-3

标准ActionLink会产生类似mysite.com/rar/hello/1/2010-01-01/的内容,如果您希望它使用路由魔法。这适用于锚标签并使用Html.ActionLink,但是,如果我想使用GET请求获得具有相同效果的表单,该怎么办?所以表格如下:

@using(Html.BeginForm("MyAction", "MyController", new { id = 20, something = "2010-01-01" }))

产生类似site.com/20/2010-01-01的网址,而不是mysite.com?id=20&something=2010-01-01

这可以不使用javascript完成吗?我的路由是正确的,因为ActionLink生成了正确的URL,但是使用相同的参数,通过表单的GET请求会生成丑陋的URL。

干杯

---编辑---

我在谷歌搜索了同样的问题,猜猜是什么?这个答案是第一个答案。我甚至没想到要问它。

所以我又遇到了同样的问题。就这么简单:

我点击了一个链接,它会转到site.com/10/100/Param这样的网址。我有一个具有相同路由值的表单,如下所示:

@using(Html.BeginForm("Action", "Controller", FormMethod.Get)) {
    @Html.Hidden("param1", 10)
    @Html.Hidden("param2", 110)
    @Html.Hidden("param3", "MyOtherParam")
}

然后,当我提交此表单时,我希望将新路由视为site.com/10/110/MyOtherParam

我能想到的唯一方法是POST一个动作方法,然后从那里重定向。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

抱歉,它不起作用。这里回答:

How to make ASP.NET Routing escape route values?

答案 1 :(得分:0)

您是否在global.asax中明确描述了路由?你需要一个像

这样的条目
routes.MapRoute(
    "NameOfRoute", // Route name
    "{controller}/{action}/{id}/{something}", // URL with parameters
    new { controller = "My", action = "MyController" }
);

完全匹配上面的ActionLink