3

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

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

当我输入 url "/Search?query=test" 时,我的 Index 操作中的 Request.Querystring 可以很好地读出搜索值(我将路由设置为忽略 url 中的操作)。当我在 seachbox 中键入它时,它会触发正确的操作和控制器(因此路由看起来很好),但查询字符串仍然为空。我究竟做错了什么?

4

1 回答 1

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);
}
于 2012-02-14T15:42:38.477 回答