Прежде всего, единственный способ получить параметры, передаваемые методу с атрибутом [AcceptVerbs (HttpVerbs.Get)], - через параметры запроса. Пример:
http://localhost/Task/Index/?task=mytask&todolist=a,b,c,d
Многие из методов действий, которые вы видите со сложными параметрами, вызываются по почте и, скорее всего, будут кандидатом на [AcceptVerbs (HttpVerbs.Post)].
Создайте следующий пример метода:
public ActionResult Index(int id, FormCollection form)
{
}
Если вы проверяете коллекцию форм, у вас может быть что-то похожее на следующее после публикации формы:
form["name"] = "bob"
form["city"] = "LA"
form["state"] = "CA"
form["zip"] = "90210"
в этом случае asp.net mvc просто проанализировал значения формы и бросил их в объект коллекции форм. Конечно, теперь вы должны извлечь каждый параметр вручную, чтобы получить доступ к значениям. Не было бы неплохо, если бы asp.net mvc справился бы с этим процессом за вас? Если у вас был следующий класс:
public class User
{
string string Name {get; set;}
string string City {get; set;}
string string State {get; set;}
string string Zip {get; set;}
}
и добавил это к вашему методу действия
public ActionResult Index(int id, User user)
asp.net mvc будет использовать отражение для всплывающего пользовательского параметра перед вызовом вашего метода действия. По сути, он делает следующее: для каждого ключа в коллекции форм он использует отражение, чтобы найти это свойство в списке параметров, объявленных в вашем методе действия. Если он находит свойство, которое соответствует, он попытается установить его значение.
user.Name = form["name"]
user.City = form["city"]
user.State = form["state"]
user.Zip = int.Parse(form["zip"])
Однако значение id устанавливается из значений маршрутизации, а не из коллекции форм.