2010-02-15 4 views
10

Я отправляю простое действие.должен формировать коллекцию пустым на asp.net mvc Запрос GET

public void Login(FormCollection formCollection) 
{ 
    ... 
} 

Даже с несколькими значениями строки запроса, то formcollection.Count является . Это поведением?

+2

Если ваше действие действительно «прост», почему бы вам просто не объявить аргументы действий для каждой переменной, которую вы ожидаете передать? Структура MVC автоматически привяжет эти переменные к вам, что означает, что (1) она будет работать независимо от того, передается ли переменная в маршруте, URL-адресе или данных формы, и (2) это делает ваш код намного легче читать , понять и проверить. В большинстве случаев передача «FormCollection» в аргумент является анти-шаблоном и его следует избегать. –

+0

@Seth - Что делать, если метод является обработчиком запроса ajax? В этом случае я предпочел бы возвратить правильный Json (новый {success = false, errorMsg = "..."}), а не страницу с ошибкой ASP.NET, если этот параметр неверен или отсутствует. –

ответ

12

FormCollection использует значения POST, а не то, что находится в строке запроса. Ваше действие должно выглядеть так:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Login(FormCollection formCollection) 
{ 
    ... 
} 
+0

Спасибо. Я пытаюсь избежать объекта Request. – Adeel

+0

как это сделать, используя http get? Я хочу, чтобы значения в URL-адресе позволяли пользователю сохранять результаты поиска – Chev

+3

@Chev, вы используете 'Request [" paramName "]' с запросами GET. –