Подтвердить что ты не робот

Использовать переменные запроса в контроллере MVC

Я новичок в С#.net MVC и пытаюсь добавить FullCalendar в приложение MVC.

FullCalendar script автоматически добавляет ?start={}&end={} к URL-адресу... это нормально, но я понятия не имею, как использовать переменные querystring в контроллере.

Методы, которые я использовал в приложениях Webforms, не работают. Что мне нужно добавить к контроллеру для доступа к переменным querystring?

4b9b3361

Ответ 1

public ActionResult SomeAction(string start, string end)

Структура отображает параметры строки запроса в параметры метода.

Ответ 2

Я понял это... наконец нашел другую статью на нем.

string start = Request.QueryString["start"];

string end = Request.QueryString["end"];

Ответ 3

Дэвидс, у меня была такая же проблема, как и вы. MVC не является интуитивным, и, похоже, когда они его разрабатывали, kiddos не понимали цели или важности интуитивной системы querystring для MVC.

В маршрутах вообще не задаются запросы (RouteConfig). Они являются дополнительными "дополнительными" параметрами для "Действия в контроллере". Это очень сбивает с толку, поскольку параметры Action предназначены для обработки BOTH-путей и Querystrings. Если вы добавили параметры, и они не сработали, добавьте второй для этой строки:

Это будет ваше действие в вашем классе Controller, который ловит идентификатор (который на самом деле представляет собой только путь, установленный в файле RouteConfig, как обычный путь по умолчанию в MVC):

public ActionResult Hello(int id)

Но для того, чтобы уловить квесты, дополнительный параметр в вашем контроллере должен быть добавлен (что НЕ установлено в файле RouteConfig, кстати):

public ActionResult Hello(int id, string start, string end)

Теперь это прослушивается для "/Hello? start = & end =" или "/Hello/? start = & end =" или "/Hello/45? start = & end =" при условии, что "id" в файле RouteConfig.cs устанавливается необязательно.

Если вы хотите создать "настраиваемый маршрут" в файле RouteConfig, который не имеет пути "id" , вы можете оставить "id" или другой параметр после действия в этом файле. В этом случае ваши параметры в методе Action в контроллере будут обрабатывать только запросы.

Я нашел это очень запутанным, поэтому вы не одиноки! Они должны были спроектировать простой способ добавления маршрутов запроса для определенных именных строк, любого имени запроса и любого количества запросов в конфигурации конфигурации файла RouteConfig. Не делая этого, он оставляет все использование запросов в веб-приложениях MVC сомнительными, что довольно странно, поскольку с середины 1990-х годов querystrings были стабильной частью World Wide Web.: (

Ответ 4

Моя проблема заключалась в перезаписи параметров строки запроса со значениями по умолчанию:

routes.MapRoute(
    "apiRoute", 
    "api/{action}/{key}", 
    new { controller = "Api", action = "Prices", key = ""}
);

Независимо от того, что я подключил к строке запроса или как результат key="".

Затем избавился от перезаписей по умолчанию, используя UrlParameter.Optional:

routes.MapRoute(
    "apiRoute", 
    "api/{action}/{key}", 
    new { controller = "Api", action = "Prices", key = UrlParameter.Optional }
);

now

prices/{key} 

или

prices?key={key} 

оба работают нормально.

Ответ 5

Вот что я придумал. У меня были серьезные проблемы с этим, и я считаю, что сейчас в MVC 6, но это может быть полезно кому-то даже самому себе в будущем.

//Проблема заключалась в том, что Reqest.Form Request.Querystring и Request, не работающие в MVC, должны использовать Context.Request.Form, а также убедиться, что форма была отправлена, в противном случае появится ошибка с нулевой ссылкой или ошибкой контекста.

     if(Context.Request.ContentLength != null)
     {
         String StartDate = Context.Request.Form["StartMonth"].ToString();
         String EndMonth = Context.Request.Form["EndMonth"].ToString();
        // Vendor

     }