[英]c# html array of form elements
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<div id="elem">
<div class="fields">
<select name="items[1][0]" id="items[1][0]">
<option value="1">Book</option>
<option value="2">Brush</option>
</select>
<input type="text" value="1" name="items[1][1]" id="items[1][1]">
<a id="test" href="#">Remove Item</a>
</div>
</div>
</div><a href="#" id="addElem">Add Item</a></div>
<br />
<input type="submit" name="name" value="Submit" />
}
基本上,它具有兩個字段的集合,即名稱字段和序列字段,但在二維數組中定義。 “ Add Item
鏈接的工作方式如下:當用戶單擊時,它將添加一組新字段,其ID為當前時間var new_id = new Date().getTime();
使用JavaScript。 因此,例如,新的字段集將是:
<div class="fields">
<select name="items[1368034980308][0]" id="items[1368034980308][0]">
<option value="1">Book</option>
<option value="2">Brush</option>
</select>
<input type="text" name="items[1368034980308][1]" id="softwarePerAsset[1368034980308][1]">
</div>
我想將它們提交給一個編輯操作,該編輯操作將通過items
數組並添加兩個字段。
我的編輯操作如下所示:
[HttpPost]
public ActionResult Edit(FormCollection col, string[,] items)
{
return View();
}
我已在此操作上設置了一個斷點,但items
數組為空,我只能通過FormCollection col
變量訪問字段。
是否有一些我缺少的items
數組設置不正確。
傑森救了。 我使用此博客( http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx )中的想法重新設計了表格,特別是非順序部分我使用時間戳添加索引時:
<div class="fields">
<input type="hidden" name="items.Index" value="1" />
<select name="items[1].name" id="items[1].name">
<option value="1">Visio</option>
<option value="2">Painter</option>
</select>
<input type="text" name="items[1].serial" id="items[1].serial" />
<a id="test" href="#">Remove Item</a>
</div>
然后在我的控制器中,將FormCollection變量序列化為json,這更容易操作:
[HttpPost]
public ActionResult Edit(FormCollection col)
{
string json = JSONHelper.ToJSON(col);
return View();
}
json
字符串的示例如下所示:
{ "btnSubmit" : "Submit",
"items.Index" : "1,2,1368212161686,1368212162374,1368212162966,1368212163750",
"items[1368212161686].name" : "1",
"items[1368212161686].serial" : "",
"items[1368212162374].name" : "2",
"items[1368212162374].serial" : "",
"items[1368212162966].name" : "1",
"items[1368212162966].serial" : "98765",
"items[1368212163750].name" : "2",
"items[1368212163750].serial" : "43210",
"items[1].name" : "1",
"items[1].serial" : "12345",
"items[2].name" : "2",
"items[2].serial" : "67890"
}
我必須創建一個ToJSON擴展名才能檢索值,否則僅檢索名稱
public static class JSONHelper
{
public static string ToJSON(this System.Web.Mvc.FormCollection collection)
{
var list = new Dictionary<string, string>();
foreach (string key in collection.Keys)
{
list.Add(key, collection[key]);
}
return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(list);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.