在 ASP.NET MVC Preview 4 中使用路由引擎进行表单提交
-
08-06-2019 - |
题
我正在使用 ASP.NET MVC Preview 4,想知道如何使用路由引擎进行表单提交。
例如,我有这样的路线:
routes.MapRoute(
"TestController-TestAction",
"TestController.mvc/TestAction/{paramName}",
new { controller = "TestController", action = "TestAction", id = "TestTopic" }
);
表单声明如下所示:
<% using (Html.Form("TestController", "TestAction", FormMethod.Get))
{ %>
<input type="text" name="paramName" />
<input type="submit" />
<% } %>
这呈现为:
<form method="get" action="/TestController.mvc/TestAction">
<input type="text" name="paramName" />
<input type="submit" />
</form>
表单提交的结果 URL 为:
localhost/TestController.mvc/TestAction?paramName=value
有什么方法可以将此表单提交路由到所需的 URL:
localhost/TestController.mvc/TestAction/value
我能想到的唯一解决方案是创建一个单独的操作来仅检查请求参数,或者使用 Javascript。
解决方案
解决方案:
public ActionResult TestAction(string paramName)
{
if (!String.IsNullOrEmpty(Request["paramName"]))
{
return RedirectToAction("TestAction", new { paramName = Request["paramName"]});
}
/* ... */
}
其他提示
在您的路由中,删除 URL 的 {paramName} 部分。它应该是:
TestController.mvc/TestAction
因为这是您希望请求路由到的 URL。然后您的表单将发布到该 URL。发布的表单值会自动映射到操作方法的参数,因此不必担心没有将该数据传递到操作方法。
我的理解是 HTML 就是这样工作的。如果你做一个 <form url="foo" method="get">
并发布表单,那么表单将发布 foo?
param1=value1&...¶mn=valuen
与MVC无关。
此外,该 URL 违反了 REST 的哪一部分?这不是一个 漂亮的 URL,但是按照REST的严格定义,它可以是RESTful的。REST 未指定查询参数必须位于 URL 段中。在本例中,这些是查询参数。
不隶属于 StackOverflow