ASP.NET MVC プレビュー 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} 部分を削除します。そのはず:
テストコントローラー.mvc/テストアクション
それがリクエストのルーティング先となる URL であるためです。フォームはその URL に投稿されます。投稿されたフォーム値はアクション メソッドのパラメーターに自動的にマッピングされるため、そのデータがアクション メソッドに渡されなくても心配する必要はありません。
私の理解では、これが HTML の仕組みです。を行う場合 <form url="foo" method="get">
そしてフォームを投稿すると、フォームは foo? を投稿します。
param1=value1&...¶mn=valuen
MVCとは関係ありません。
さらに、その URL は REST のどの部分に違反していますか?それはありません かわいい URL ですが、REST の厳密な定義によれば、RESTful である可能性があります。REST では、クエリ パラメーターが URL セグメント内に存在する必要があるとは指定されていません。この場合、それらはクエリ パラメーターです。
所属していません StackOverflow