在ASP.NET MVC Preview 4中使用路由引擎进行表单提交

Mat*_*ell 12 forms asp.net-mvc asp.net-mvc-routing

我正在使用ASP.NET MVC Preview 4,并想知道如何使用路由引擎进行表单提交.

例如,我有这样的路线:

routes.MapRoute(
            "TestController-TestAction",
            "TestController.mvc/TestAction/{paramName}",
            new { controller = "TestController", action = "TestAction", id = "TestTopic" }
            );
Run Code Online (Sandbox Code Playgroud)

一个表单声明如下:

<% using (Html.Form("TestController", "TestAction", FormMethod.Get))
   { %>
     <input type="text" name="paramName" />
     <input type="submit" />
<% } %>
Run Code Online (Sandbox Code Playgroud)

它呈现给:

<form method="get" action="/TestController.mvc/TestAction">
  <input type="text" name="paramName" />
  <input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

表单提交的结果URL是:

localhost/TestController.mvc/TestAction?paramName=value
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个表单提交路由到所需的URL:

localhost/TestController.mvc/TestAction/value
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一解决方案是创建一个单独的操作,只检查请求参数,或使用Javascript.

Mat*_*ell 9

解:

public ActionResult TestAction(string paramName)
{
    if (!String.IsNullOrEmpty(Request["paramName"]))
    {
        return RedirectToAction("TestAction", new { paramName = Request["paramName"]});
    }
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)