是的,ASP.NET MVC可以自动将集合绑定到操作参数,但您需要将参数作为表单值传递,此外,看起来您要在查询字符串中传递太多参数。看看这个链接http://weblogs.asp.net/nmarun/archive/2010/03/13/asp-net-mvc-2-model-binding-for-a-collection.aspx
基本上你需要做的是:
1)创建包含参数的类
public class MyParam
{
public int Id {get; set;}
public string Name {get; set;}
}
2) 创建一个模型,然后将其传递给视图
public class MyViewModel
{
IList<MyParam> MyParams {get; set;}
}
3) 在你的 [HttpGet]
操作中创建你的集合并将其传递给你的视图:
[HttpGet]
public virtual ActionResult Index()
{
MyViewModel model = new MyViewModel();
model.MyParams = CreateMyParamsCollection();
return View(model);
}
4) 在视图中迭代您的集合
@model MyViewModel
@{int index = 0;}
@foreach (MyParam detail in Model.MyParams)
{
@Html.TextBox("MyParams[" + index.ToString() + "].Id", detail.Id)
@Html.TextBox("MyParams[" + index.ToString() + "].Name", detail.Name)
index++;
}
5) 然后在您的[HttpPost]
操作中,您可以在集合中捕获参数
[HttpPost]
public virtual ActionResult Index(MyViewModel model)
或者
[HttpPost]
public virtual ActionResult Index(IList<MyParam> model)
P.S
此外,如果您想在控制器中获取所有表单参数,可以简单地这样做:
[HttpPost]
public virtual ActionResult Index(FormCollection form)