12

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 を使用することです。

4

3 に答える 3

9

解決:

public ActionResult TestAction(string paramName)
{
    if (!String.IsNullOrEmpty(Request["paramName"]))
    {
        return RedirectToAction("TestAction", new { paramName = Request["paramName"]});
    }
    /* ... */
}
于 2008-09-08T04:58:18.700 に答える
3

ルートで、URL の {paramName} 部分を削除します。そのはず:

TestController.mvc/TestAction

それがリクエストのルーティング先の URL であるためです。フォームはその URL に投稿されます。投稿されたフォームの値は、アクション メソッドのパラメーターに自動的にマップされるため、そのデータがアクション メソッドに渡されなくても心配する必要はありません。

于 2008-08-12T05:24:55.353 に答える
3

私の理解では、これが HTML の仕組みです。a を実行し<form url="foo" method="get">てフォームを投稿すると、フォームは foo? を投稿します。

param1=value1&...&paramn=valuen

MVCとは関係ありません。

さらに、その URL は REST のどの部分に違反していますか? これはきれいな URL ではありませんが、REST の厳密な定義により、RESTful にすることができます。REST では、クエリ パラメーターが URL セグメント内にある必要があるとは指定されていません。この場合、それらはクエリ パラメータです。

于 2008-08-28T14:16:24.787 に答える