使用Request.Querystring替代Response.Redirect

时间:2013-11-06 15:15:10

标签: c# asp.net-mvc-4 response.redirect request.querystring

我在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.Redirectmvc4的替代方法是什么,这仍然允许我在Request.Querystring页面上使用Result.cshtml保持searchCriteria的读取。

2 个答案:

答案 0 :(得分:3)

您应该在控制器中做到这一点,使其返回ActionResult并返回RedirectResult,即:

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

顺便说一句,我还说不要同时使用Request的东西(甚至是Redirects),而是使用MVC将自动从POST或GET参数绑定参数的动作。例如,“www.something.com/search?searchCriteria=hello”将自动将searchCriteria参数绑定到Action处理/搜索。或者,“www.something.com/search/hello”将绑定到路由配置中定义的参数。

答案 1 :(得分:2)

一个简单的例子是这样的:

Index.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可以是ResultsViewModel类型,它会包含显示结果所需的所有内容。这样,您的搜索就会以RESTful方式设置 - 这意味着每次都能保持一致。