发布:2023/12/7 15:28:38作者:大数据 来源:大数据 浏览次数:451
可以分两种办法处理controller中传递对象数组或对象集合的情况,
第一种办法如下:
将对象数组在view中拆分成以下形式,注意数组标识从0开始,中间截断,比如0,1,2,4,5,则4,5后面的数组不会获得,必须连续,且从0开始。name中参数不区分大小写。
1 2 3 4 5 6 7 8 9 10 11 |
<form method="post"> <input name="product[0].ProductName" value="a" /> <input name="product[1].ProductName" value="b" /> <input name="product[2].ProductName" value="c" /> <input name="categories[0].CategoryName" value="aa" /> <input name="Categories[1].CategoryName" value="bb" /> <input name="Categories[2].CategoryName" value="cc" /> <input name="Categories[3].CategoryName" value="dd" /> <button type="submit" class="btn btn-danger">提交</button> </form> |
前端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<form method="post" action="save"> <div> <h3>网址列表(数组获取提交数据,name=Urls)</h3> <ul> <li><input type="text" name="Urls" value="http://shiyousan.com" /></li> <li><input type="text" name="Urls" value="http://shiyousan.com/sitemap.xml" /></li> <li><input type="text" name="Urls" value="http://siyousan.com/p1" /></li> <li><input type="text" name="Urls" value="http://siyousan.com/p2" /></li> <li><input type="text" name="Urls" value="http://siyousan.com/p3" /></li> </ul> <hr /> <h3>备注信息列表(泛型集合获取提交数据,name=Remarks)</h3> <ul> <li><input type="text" name="Remarks" value="备注1:11111" /></li> <li><input type="text" name="Remarks" value="备注2:22222" /></li> <li><input type="text" name="Remarks" value="备注3:33333" /></li> </ul> <br /> <input type="submit" value="表单提交数据"/> </div> </form> |
后台controller action
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public ActionResult ShowSubmitData(string[] Urls, List<string> Remarks) { foreach (string url in Urls) { Response.Write(url); Response.Write("<hr/>"); } foreach (string reamrk in Remarks) { Response.Write(reamrk); Response.Write("<hr/>"); } return View(); } |
二、传递对象列表list
利用【 @Html.TextBoxFor() 】来进行渲染,此时是个集合,则只能用for循环来进行遍历,否则获取不到对象,于是乎将数据渲染时修改成下面的这个样子。可以看到对于集合数据的绑定,MVC中有自己的定义规则,所有的表单项都是[number].Field的形式。
Asp.net MVC中的Model自动绑定功能,方便了我们对于request中的数据的处理, 从客户端的请求数据,自动地以Action方法参数的形式呈现。有时候我们的Action方法中想要接收数组类型的参数,如何写表单,使得Model能够自动绑定到数组参数上呢?
看下面的代码,Action方法UpdateStudents就需要IEnumerable<Student>类型的参数,用来批量更新Student数据。
1 2 3 4 5 6 |
[HttpPost] public ActionResult UpdateStudents(IEnumerable<Student> students) { //....save } |
下面就是在批量更新场景下的表单View代码
1 2 3 4 5 6 7 8 9 10 11 12 |
@using(Html.BeginForm()) { for (var i = 0; i < Model.Count(); i++ ) { <div style="border-bottom: 1px solid red;"> <p>id:@Html.TextBoxFor(m => m[i].Id)</p> <p>name:@Html.TextBoxFor(m => m[i].Name)</p> <p>age:@Html.TextBoxFor(m => m[i].Age)</p> </div> } <input type ="submit"/> } |
view生成的表单如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<form action="/home/updatestudents" method="post"> <div style="border-bottom: 1px solid red;"> <p>id:<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." name="[0].Id" type="text" value="1" /></p> <p>name:<input name="[0].Name" type="text" value="Andrew Peters" /></p> <p>age:<input data-val="true" data-val-number="The field Age must be a number." data-val-required="The Age field is required." name="[0].Age" type="text" value="18" /></p> </div> <div style="border-bottom: 1px solid red;"> <p>id:<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." name="[1].Id" type="text" value="2" /></p> <p>name:<input name="[1].Name" type="text" value="Brice Lambson" /></p> <p>age:<input data-val="true" data-val-number="The field Age must be a number." data-val-required="The Age field is required." name="[1].Age" type="text" value="29" /></p> </div> <div style="border-bottom: 1px solid red;"> <p>id:<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." name="[2].Id" type="text" value="3" /></p> <p>name:<input name="[2].Name" type="text" value="Rowan Miller" /></p> <p>age:<input data-val="true" data-val-number="The field Age must be a number." data-val-required="The Age field is required." name="[2].Age" type="text" value="56" /></p> </div> <input type ="submit"/> </form> |
第二办法将集合对象在view中序列化成json字符串,然后在controller中将字符串反序列化成对应的对象集合
可以使用js或jquery将input里的value设置成json字符串
1 |
<input type="hidden" name="products_json" value='[{ProductName:"one"},{ProductName:"one"}]'/> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// POST: Default/Create [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(ProductViewModel productViewModel,string products_json) { try { // TODO: Add insert logic here ViewBag.ProductCount = productViewModel.Products.Count; ViewBag.CategoryCount = productViewModel.Categories.Count; ViewBag.Products = JsonConvert.DeserializeObject<List<Product>>(products_json); return View(productViewModel); //return RedirectToAction(nameof(Index)); } catch { return View(); } } |
C#将list或数组转字符串,list转字符串,list转化为字符串
String.Join(",",list)
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4