Ответ 1
public ActionResult SomeAction(string start, string end)
Структура отображает параметры строки запроса в параметры метода.
Я новичок в С#.net MVC и пытаюсь добавить FullCalendar
в приложение MVC.
FullCalendar
script автоматически добавляет ?start={}&end={}
к URL-адресу... это нормально, но я понятия не имею, как использовать переменные querystring
в контроллере.
Методы, которые я использовал в приложениях Webforms, не работают. Что мне нужно добавить к контроллеру для доступа к переменным querystring
?
public ActionResult SomeAction(string start, string end)
Структура отображает параметры строки запроса в параметры метода.
Я понял это... наконец нашел другую статью на нем.
string start = Request.QueryString["start"];
string end = Request.QueryString["end"];
Дэвидс, у меня была такая же проблема, как и вы. 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.: (
Моя проблема заключалась в перезаписи параметров строки запроса со значениями по умолчанию:
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}
оба работают нормально.
Вот что я придумал. У меня были серьезные проблемы с этим, и я считаю, что сейчас в 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
}