我传递了参数列表.如“名称”,“Id”,“类型”. url中会有很多这样的内容,如下所示:
"Name=blah1,Id=231,Type=blah1;Name=blah2,Id=2221,Type=blah1;Name=blah3,Id=45411,Type=blah3;"
我想知道是否有办法将这些查询参数映射到对象列表.所以,我可以创建一个对象:@H_301_5@
MyTestObject {Name; Id; Type},可以在我的控制器中说出来@H_301_5@
Index(IList<MyTestObject> params)
与http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx类似的东西@H_301_5@
解决方法
是的ASP.NET MVC可以自动将集合绑定到操作参数,但是您需要将params作为from值传递,而且它看起来像是在查询字符串中传递的许多参数.看看这一个
http://weblogs.asp.net/nmarun/archive/2010/03/13/asp-net-mvc-2-model-binding-for-a-collection.aspx
基本上你需要做的是:@H_301_5@
1)创建包含你的参数的calss@H_301_5@
public class MyParam { publc int Id {get; set;} public string Name {get; set;} //do all the rest }
2)创建您将传递给视图的模型@H_301_5@
public class Myviewmodel { IList<MyParam> MyParams {get; set;} }
3)在[HttpGet]操作中创建您的集合并将其传递给您的视图:@H_301_5@
[HttpGet] public virtual ActionResult Index() { Myviewmodel model = new Myviewmodel(); model.MyParams = CreateMyParamsCollection(); return View(model); }
4)在视图中迭代您的集合@H_301_5@
@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]行动中,您可以在收集中捕获您的参数@H_301_5@
[HttpPost] public virtual ActionResult Index(Myviewmodel model) or [HttpPost] public virtual ActionResult Index(IList<MyParam> model)
P.S@H_301_5@
此外,如果你想在控制器中获得所有的形式参数,你可以这么简单:@H_301_5@
[HttpPost] public virtual ActionResult Index(FormCollection form)