【发布时间】:2010-09-07 09:01:19
【问题描述】:
我的问题是我有一个动态循环,我在其中生成 5 个文本框,现在我需要获取每个索引的数据,因为我想通过数组发送给控制器。谁能告诉我如何从文本框数组中获取值。所有文本框都具有相同的名称和 ID,但它们有一个索引。
【问题讨论】:
标签: jquery asp.net-mvc asp.net-mvc-2
我的问题是我有一个动态循环,我在其中生成 5 个文本框,现在我需要获取每个索引的数据,因为我想通过数组发送给控制器。谁能告诉我如何从文本框数组中获取值。所有文本框都具有相同的名称和 ID,但它们有一个索引。
【问题讨论】:
标签: jquery asp.net-mvc asp.net-mvc-2
您可以在控制器中迭代 HttpContext.Request.Form.AllKeys,例如:
foreach(var key in HttpContext.Request.Form.AllKeys) {
if(key.StartsWith("textboxname")) { // key will look like textboxname[1]
// value is in
var val = HttpContext.Request.Form[key];
}
}
【讨论】:
只要跟着 the haacked explanation on binding to collections
并以正确的方式创建您的输入 现在需要在客户端进一步解析它
【讨论】:
首先,您不应该有多个具有相同 ID 的元素。如果你愿意,它们都可以拥有相同的 CLASS。
已更新以反映明确的要求。
但是,要解决您的问题,您可以试试这个:
$("#yourformID").bind("submit", function() {
var groups = new Array();
$("textarea").each(function(i, el) {
name = $(el).attr("name");
index = $(el).attr("index"); // Is 'index' an attr?
if (groups[name] === undefined) {
groups[name] = new Array();
}
groups[name][index] = $(el).val();
});
// You can now insert the array as the value of the submit button...
$(this).find("input[type=submit]").val(groups);
return true;
});
我不确定你所说的“索引”是什么意思,但如果这是 textarea 上的一个属性,那么这应该会让你接近。
当然,在服务器端,您需要分解数组的数组,但此时每个项目都应该很容易通过名称和索引来引用。
祝你好运!
【讨论】: