dev*_*per 5 asp.net-mvc asp.net-mvc-routing
我传递了一个参数列表。如“名称”、“ID”、“类型”。url 中会有很多这样的内容,如下所示:
"Name=blah1,Id=231,Type=blah1;Name=blah2,Id=2221,Type=blah1;Name=blah3,Id=45411,Type=blah3;"
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法将这些查询参数映射到对象列表。所以,我可以创建一个对象:
MyTestObject {Name;Id;Type} 并且可以在我的控制器中说
Index(IList<MyTestObject> params)
Run Code Online (Sandbox Code Playgroud)
params 将填充来自查询字符串的数据。
类似于http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx 的东西
我实际上遵循了Haack 先生的文章中的建议, 我创建了一个类,其中所有参数都作为公共属性。然后我有一个视图,获取该类型对象的列表。如果查询参数名称遵循某种模式(以索引为前缀),那么我会自动填充一个我的对象列表,我根本不需要进行任何手动解析。这对我来说是最简单的解决方案。
例子:
查询参数对象:
public class QueryParams
{
public string Id,
public string Name,
public string Type
}
Run Code Online (Sandbox Code Playgroud)
在控制器方法中:
public ActionResult Index(IList<QueryParams> queryData)
Run Code Online (Sandbox Code Playgroud)
然后我确保查询字符串按以下方式格式化(以索引开头):
http://localhost/myapp/?[0].id=123&[0].Name=blah&[0].Type=Person&[1].Id=345&[1].Name=example&[1].Type=东西
在我的控制器中,queryData 列表参数将包含两个填充了正确数据的对象。
是的,ASP.NET MVC 可以自动将集合绑定到操作参数,但是您需要将参数作为 from 值传递,而且,您似乎要在查询字符串中传递许多参数。看看这个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;}
//do all the rest
}
Run Code Online (Sandbox Code Playgroud)
2)创建模型并将其传递到视图
public class MyViewModel
{
IList<MyParam> MyParams {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
3)在您的操作中创建您的集合[HttpGet]并将其传递到您的视图:
[HttpGet]
public virtual ActionResult Index()
{
MyViewModel model = new MyViewModel();
model.MyParams = CreateMyParamsCollection();
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
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++;
}
Run Code Online (Sandbox Code Playgroud)
5)比你的[HttpPost]行动你可能会在集合中捕获你的参数
[HttpPost]
public virtual ActionResult Index(MyViewModel model)
Run Code Online (Sandbox Code Playgroud)
或者
[HttpPost]
public virtual ActionResult Index(IList<MyParam> model)
Run Code Online (Sandbox Code Playgroud)
聚苯乙烯
此外,如果您想在控制器中获取所有表单参数,您可以简单地这样做:
[HttpPost]
public virtual ActionResult Index(FormCollection form)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18744 次 |
| 最近记录: |