0

Razor テンプレートに検索ボックスがあります。

    @{
        using (Html.BeginForm("Detail", "Book", FormMethod.Get))
        {
        @Html.TextBox("Id")
        <input type="submit" value="Search" />
        }
    }

検索を送信すると、次のような URL に移動します。

~/本/詳細?Id=1234

ただし、見た目がきれいだと思うという理由だけで、URLを次のようにフォーマットしたいと思います。

~/本/詳細/1234

コントローラーメソッドのシグネチャは次のようになるため、これは完全に正常に機能します。

    // GET: /Book/Detail/id
    public ActionResult Detail(string id)

TextBoxFor を使用したモデル

私は試しましたHtml.TextBoxFor

    @model WebApplication.Models.SearchModel
    @{
        using (Html.BeginForm("Detail", "Book", FormMethod.Get))
        {
        @Html.TextBoxFor(m => m.Id)
        <input type="submit" value="Search" />
        }
    }

同じ結果です。

4

4 に答える 4

1

この質問のように、 @Html.BeginRouteForm メソッドを見てみたいと思います。

于 2013-08-07T09:29:14.497 に答える
1

リクエストを使用しますGET。これは、すべてのパラメータが URL ボックスに表示されることを意味します。今は確認できませんが、次のオプションを使用できると思います。

  1. IIS URL の書き換え - http://www.iis.net/downloads/microsoft/url-rewrite
  2. web.config による URL 書き換え - http://www.hanselman.com/blog/RedirectingASPNETLegacyURLsToExtensionlessWithTheIISRewriteModule.aspx

そして、ばかげたメソッドのバッチ:

  1. リクエストを変更してからPOST、JS で URL を変更できます -ページをリロードせずに URL を変更します
  2. リクエストをリダイレクトできます

また、検索 URL の個人ルーティングを追加しようとしましたか?

于 2013-08-07T11:54:09.210 に答える
0

その答えは、新しい検索アクションを追加してから詳細にリダイレクトすることでした。クエリに複数の一致がある場合に別のビューを返すなど、検索時により多くのことを選択できるため、これは便利です。

    //
    // GET: /Book/Search?query=
    public ActionResult Search(string query)
    {
        return RedirectToAction("Detail", new { id = query });
    }

    //
    // GET: /Book/Detail/id
    public ActionResult Detail(string id)

かみそり:

@{
    using (Html.BeginForm("Search", "Book", FormMethod.Get))
    {
        @Html.TextBox("query")
        <input type="submit" value="Search" />
    }
}
于 2013-08-07T13:55:17.603 に答える