MVC @ Html.BeginForm匹配错误的路由

时间:2013-09-29 14:41:10

标签: asp.net-mvc asp.net-mvc-routing html.beginform

我正在尝试向我的用户提供一个表单,他们可以在其中输入开始的邮政编码,点击按钮,然后在提供已知邮政编码行车路线的页面上结束。

我想要匹配的路线定义为:

routes.MapRoute("Directions", "Directions/{Name}/{StartPostCode}-to-{DestinationPostCode}", new { controller = "Directions", action = "Index" });

我使用以下代码来呈现表单:

@using (@Html.BeginForm("Index", "Directions", new { DestinationPostCode = Model.postcode, Name = Model.nameURLized }, FormMethod.Get))
{
    <input type="text" name="StartPostCode" id="StartPostCode" class="inputGreyed" value="Enter Postcode" onclick="ToggleDefaultText(this)"/>
    <input type="submit" value="Get Directions" />
}

问题是我最终到了/Directions/Index?StartPostCode=abc123。它缺少目标邮政编码和名称键值对。这当然意味着最终我的请求被错误的路由处理。我已经使用Phil Haacks路由调试器证明了这一点。

我已经测试过直接转到/Directions/TheName/ABC123-to-DT83PX,它按预期工作。事实上,我尝试使用以下代码构建链接:

@Html.ActionLink("Directions Generated", "Index", "Directions", new { StartPostCode = "ABC123", DestinationPostCode = Model.postcode, Name = Model.nameURLized }, new { @class = "button", @title = "More details on " + Model.name })

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

请执行以下操作:

a)添加默认路线:

routes.MapRoute(null, "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }

b)将DestinationPostCode和ListingName的值传递给隐藏的输入字段。

c)使用:

@using (@Html.BeginForm("Index", "Directions")) { your code }