Строка запроса от BeginForm в MVC 3 - PullRequest
0 голосов
/ 29 июля 2011

Я хочу использовать BegingForm с методом Get, и это то, что я делаю

@using (Html.BeginForm("Search","Home",FormMethod.Get))
{ 
   //My input elements

}

public class HomeController : Controller
{
    public ActionResult Search(string queryString)
    {
    }

}

но строка запроса всегда возвращается как ноль. Я думаю, мне нужно что-то сделать с маршрутом, но не повезло

routes.MapRoute(
            "SearchRoute", // Route name
            "Home/Search{queryString}", // URL with parameters
            new { controller = "Home", action = "Search", filter = UrlParameter.Optional } // Parameter defaults
            );

Очевидно, что приходящий URL-адрес сервера выглядит как

Начало / Поиск? Запрос = "ли" & Query2 = "л" & query3 = "л"

Что я делаю не так? Как правильно получить параметры запроса в моем контроллере, когда я хочу использовать get with beginform?

Кроме того, что, если содержимое моей BeginForm может измениться, и поэтому имена параметров строки запроса могут отличаться в зависимости от отображаемой страницы, но я хочу один метод Search, который анализирует строку запроса и выполняет правильные действия?

Кроме того, есть ли способ запросить параметры в словаре?

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Очевидно, что следующий URL-адрес сервера Главная / Поиск? Запрос = "бла" & Query2 = "бла" & query3 = "бла"

Вот как работает HTML <form> с методом GET, и это не имеет ничего общего с ASP.NET MVC, это обычный HTML. Вы ничего не можете с этим поделать, кроме того, что ваш контроллер выглядит так:

public ActionResult Search(SearchViewModel model)
{
    ...
}

Где SearchViewModel будет содержать свойства для каждого поля ввода в этой форме. Также вам не нужно это SearchRoute, так как оно не будет работать.

При этом вы, вероятно, могли бы использовать javascript, чтобы подписаться на событие onsubmit формы, отменить отправку по умолчанию (которая демонстрирует поведение, которое вы наблюдаете в настоящее время), вручную извлечь все значения внутри вашей формы, а затем вручную создайте URL-адрес, который вы хотите, и перенаправьте на него, используя window.location.href = '....';. Я упоминаю об этом только для полноты, но совершенно не как то, что я рекомендую или что вы должны когда-либо делать.

0 голосов
/ 30 июля 2011

Если вы хотите получить элементы из строки запроса, просто используйте объект «Запрос» из ControllerBase:

    public ActionResult Search()
    {
         var queries = new List<string>();
         foreach (var parameter in Request.QueryString)
         {
             queries.Add(parameter.ToString());
         }
         //Do Stuff with the query parameters...
         return View("Index");
    }

А «Request.QueryString» - это словарь, как вы и хотели :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...