0

mvc4Visual 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的替代方法,它仍然允许我在页面mvc4上保留 searchCriteria 以供阅读。Request.QuerystringResult.cshtml

4

2 回答 2

3

您应该明确地在您的控制器中执行此操作,使其返回一个ActionResult并返回一个 RedirectResult,即:

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

顺便说一句,我还要说不要使用任何请求的东西(甚至重定向),而是使用 MVC 将自动从 POST 或 GET 参数绑定的参数的操作。例如,“www.something.com/search?searchCriteria=hello”会自动将 searchCriteria 参数绑定到 Action 处理 /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);
    }
}

model可以是 type ResultsViewModel,它将包含显示结果所需的所有内容。这样,您的搜索以 RESTful 方式设置 - 这意味着它每次都表现一致。

于 2013-11-06T15:38:33.317 回答