我在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.Redirect
中mvc4
的替代方法是什么,这仍然允许我在Request.Querystring
页面上使用Result.cshtml
保持searchCriteria的读取。
答案 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方式设置 - 这意味着每次都能保持一致。