簡體   English   中英

C#HTML表單元素數組

[英]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>&nbsp;&nbsp;
            <input type="text" value="1" name="items[1][1]" id="items[1][1]">&nbsp;&nbsp;
            <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>&nbsp;&nbsp;
 <input type="text" name="items[1].serial" id="items[1].serial" />&nbsp;&nbsp;
 <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM