ASP.NET MVC プレビュー 4 でのフォーム送信にルーティング エンジンを使用する

StackOverflow https://stackoverflow.com/questions/8485

質問

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&...&paramn=valuen

MVCとは関係ありません。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top