У розділі ASP.NET MVC ви повинні збирати параметри QueryString так само, як і в ASP.NET WebForms? чи [AcceptVerbs(HttpVerbs.Get)]
декларація якось звикає?
Відповіді:
Параметри рядка запиту можна прийняти, просто використовуючи аргумент дії - тобто
public ActionResult Foo(string someValue, int someOtherValue) {...}
який прийме такий запит, як .../someroute?someValue=abc&someOtherValue=123
Крім цього, ви можете переглядати запит безпосередньо, щоб отримати більше контролю.
Я думаю, що ви шукаєте
Request.QueryString["QueryStringName"]
і ви можете отримати доступ до нього у поданнях, додавши @
тепер подивіться на мій приклад ,,, я створив URL-адресу з QueryString
var listURL = '@Url.RouteUrl(new { controller = "Sector", action = "List" , name = Request.QueryString["name"]})';
значення listURL - /Sector/List?name=value'
а коли queryString
порожній
Значення listURL становить /Sector/List
Я рекомендую використовувати властивість ValueProvider контролера, багато в чому так, як UpdateModel / TryUpdateModel для вилучення необхідних параметрів маршруту, запиту та форми. Це не дозволить вашим підписам методів зростати дуже великими і піддаватися частим змінам. Це також полегшує тестування, оскільки ви можете подавати ValueProvider на контролер під час модульних тестів.
Насправді ви можете захопити рядки запитів у MVC двома способами .....
public ActionResult CrazyMVC(string knownQuerystring)
{
// This is the known query string captured by the Controller Action Method parameter above
string myKnownQuerystring = knownQuerystring;
// This is what I call the mysterious "unknown" query string
// It is not known because the Controller isn't capturing it
string myUnknownQuerystring = Request.QueryString["unknownQuerystring"];
return Content(myKnownQuerystring + " - " + myUnknownQuerystring);
}
Це захопить обидва рядки запиту ... наприклад:
/CrazyMVC?knownQuerystring=123&unknownQuerystring=456
Output: 123 - 456
Не питайте мене, чому вони так спроектували. Було б більш розумно, якби вони викинули всю систему дій контролера для окремих рядків запитів і просто повернули захоплений динамічний список усіх рядків / кодованих файлових об’єктів для URL-адреси за допомогою url-form-encoding, щоб ви могли легко отримати доступ до всіх за один виклик . Може хтось тут може продемонструвати це, якщо це можливо?
Для мене немає сенсу в тому, як контролери захоплюють рядки запитів, але це означає, що у вас є більша гнучкість для захоплення рядків запитів, ніж вони вас навчать нестандартно. Тож вибирай свою отруту .... обидва працюють нормально.