mvc3: поиск в формате html.beginform, возвращающий пустую строку запроса - PullRequest
3 голосов
/ 14 февраля 2012

В приложении 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", Request.Querystring в моем действии Index считывает поискЗначение очень хорошо (у меня есть мои маршруты установлены, чтобы игнорировать действие в URL).Когда я набираю его в seachbox, он попадает в нужное действие и контроллер (поэтому маршрутизация выглядит нормально), но строка запроса остается пустой.Что я делаю не так?

1 Ответ

4 голосов
/ 14 февраля 2012

Проблема в том, что вы смотрите в коллекцию 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; }
    }
}

View

@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);
}
...