mvc3:html.beginform搜索返回空的查询字符串

时间:2012-02-14 15:40:59

标签: asp.net-mvc-3 query-string html.beginform

在MVC3应用程序中,我有以下视图:

@using (Html.BeginForm("Index", "Search", new {query = @Request.QueryString["query"]}, FormMethod.Post))
{
   <input type="search" name="query" id="query" value="" />
}

当我输入网址“/ Search?query = test”时,我的Index操作中的Request.Querystring完全读出搜索值(我的路由设置为忽略url中的Action)。当我在seachbox中键入它时,它会触及正确的操作和控制器(因此路由看起来很好)但是查询字符串保持为空。我做错了什么?

1 个答案:

答案 0 :(得分:4)

问题是你要查看Request.QueryString集合。但您正在执行POST,因此query值位于Request.Form集合中。但我认为你希望你的TextBox填充数据,所以可以像我的样本一样。

示例

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
   <input type="search" name="query" id="query" value="@Request.Form["query"]" />
}

但这不是真正的MVC方法。你应该为它创建一个ViewModel。

<强>模型

namespace MyNameSpace.Models
{
    public class SearchViewModel
    {
        public string Query { get; set; }
    }
}

查看

@model MyNameSpace.Models.SearchViewModel

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
   @Html.TextBoxFor(x => x.Query)
   <input type="submit" />
}

<强>控制器

public ActionResult Index()
{
    return View(new SearchViewModel());
}

[HttpPost]
public ActionResult Index(SearchViewModel model)
{
    // do your search
    return View(model);
}