0

mvc4でプロジェクトを作成しましたVisual Studio Express 2012 for web。そこで、検索機能を作りました。そして、結果を表示するビュー。

したがって、通常はこれをに追加し_Layout.cshtmlます。

if (Request["btn"] == "Search")
{
    searchValue = Request["searchField"];

    if (searchValue.Length > 0)
    {
        Response.Redirect("~/Views/Search/Result.cshtml?searchCriteria=" + searchValue);
    }
}

そして、それはうまくいきません。Response.Redirectinに代わるものは何でしょうか。これにより、ページでmvc4searchCriteria を読み取れるようにしておくことができます。Request.QuerystringResult.cshtml

4

2 に答える 2

3

コントローラーでこれを明確に行いActionResult、RedirectResult を返し、RedirectResult を返すようにする必要があります。

public ActionResult Search(string searchCriteria) {
    return Redirect("~/Views/Search/Result.cshtml?searchCriteria="+searchCriteria);
}

ところで、リクエストのもの (またはリダイレクト) も使用しないでください。ただし、MVC が POST または GET パラメーターから自動的にバインドするパラメーターを使用するアクションは使用しないでください。たとえば、「www.something.com/search?searchCriteria=hello」は、searchCriteria パラメータをアクション処理 /search に自動的にバインドします。または、「www.something.com/search/hello」は、ルーティング構成に定義されたパラメーターにバインドされます。

于 2013-11-06T15:20:16.617 に答える
2

簡単な例は次のようになります。

インデックス.cshtml:

@using (Html.BeginForm("Results", "Search", FormMethod.Get))
{
    @Html.TextBox("searchCriteria")
    <input type="submit" value='Search' />
}

次に、コントローラー:

public class SearchController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Results(string searchCriteria)
    {
        var model = // ... filter using searchCriteria

        return View(model);
    }
}

modelResultsViewModel結果を表示するために必要なすべてを含むtype にすることができます。このように、検索は RESTful な方法でセットアップされます。つまり、毎回一貫して動作します。

于 2013-11-06T15:38:33.317 に答える