2

私はmvc4で作業しており、ユーザーがURLに渡されて別のページにリダイレクトされる入力フィールドにテキストを入力できるフィールドがあります. /検索/<>

私のフォームは次のとおりですが、クエリ文字列としてリダイレクトされます。

<form class="search" action="@Url.Action("Index", "Search")">
<div>
    <input name="q" value="" type="search" />
    <input type="image" name="btn" value="search" src="@Url.Content("/image1.jpg")" />
</div>

</form>

入力した値を「q」をURLに渡すようにフォームを変更する方法を教えてください。

4

3 に答える 3

3

GET次の方法を使用できます。

<form class="search" action="@Url.Action("Index", "Search")" method="get">
    <div>
        <input name="q" value="" type="search" />
        <input type="image" name="btn" value="search" src="@Url.Content("~/image1.jpg")" />
    </div>
</form>

Html.BeginFormこの目的のために設計されたヘルパーを使用して、これとまったく同じマークアップを生成することもできます。

@using (Html.BeginForm("Index", "Search", FormMethod.Get, new { @class = "search" }))
{
    <div>
        <input name="q" value="" type="search" />
        <input type="image" name="btn" value="search" src="@Url.Content("~/image1.jpg")" />
    </div>
}

GET メソッドを使用すると、フォームの送信時にすべての入力要素の値がクエリ文字列で送信されます。

また、クエリ文字列パラメーターを使用する代わりに、URL のパス部分に検索文字列を追加する場合はfollowing blog post、Scott Hanselman の をお読みください。彼の結論だけを引用します。

リクエスト パスでクレイジーなものを取得するためのこのすべての努力の後、値をクエリ文字列の一部として保持するだけのほうが簡単で、クリーンで、より柔軟で、より柔軟であることに言及する価値があります (この記事の最初の WAY を覚えていますか?)。安全。

于 2013-01-28T21:58:14.153 に答える
0

あなたのインデックスビューは次のようになります

   @{
       ViewBag.Title = "Index";
    }

    <h2>Index</h2>
    @using (Html.BeginForm("Search", "Home"))
    {
        @Html.TextBox("query")
    }

そしてあなたの HomeController のような

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
    public ActionResult Search(string query)
    {
        if (string.IsNullOrEmpty(query) == false)
            return RedirectToAction(query);
        else 
            return RedirectToAction("Index");
    }
}
  1. リダイレクトしたいアクションの名前をテキストボックスに入力し、Enter キーを押します。
于 2013-01-28T22:27:13.000 に答える