我有一个表单,允许用户使用JQuery(使用.clone)创建额外的“行”,以便他们可以决定需要提交多少相同的信息。我的问题是我无法弄清楚如何在我的控制器中访问这些表单项。
正在提交的表单可能如下所示
<input type="text" name="Amount" id="Amount">
<select name="Item">
<option value="1">Item 1"</option>
<option value="2">Item 2"</option>
<option value="3">Item 3"</option>
</select>
<input type="text" name="Amount" id="Amount">
<select name="Item">
<option value="1">Item 1"</option>
<option value="2">Item 2"</option>
<option value="3">Item 3"</option>
</select>
<input type="text" name="Amount" id="Amount">
<select name="Item">
<option value="1">Item 1"</option>
<option value="2">Item 2"</option>
<option value="3">Item 3"</option>
</select>
基本上,input
和选择之间的块可以重复无限次。当我提交给控制器时,我正在使用FormCollection form
来访问表单元素。从那里我不确定如何访问已提交的项目。我想过使用for循环,然后通过类似[[Amount]] [i]之类的东西访问它们,但显然这样做不会起作用。
我是否以正确的方式解决这个问题,如果有的话,是否有人对此如何运作有任何建议?
提前致谢。
答案 0 :(得分:15)
老问题,但仍然......
您可以通过调用Request.Form.GetValues
或Request.QueryString.GetValues
将发布的值作为数组获取。例如:
string[] amounts = Request.Form.GetValues("Amount");
amounts
数组将包含正确的值,因此您可以发布包含comas,dots等的值,并且不用担心拆分/解析它。
当然,如果您正在运行MVC,请使用modelbinder来执行此操作。但是如果你使用的是webforms,一个通用的处理程序等,你可以使用它......
答案 1 :(得分:9)
结帐Model Binding To A List。你的Action方法应该是:
public ActionResult MyAction(string[] Amount, int[] Item){
// ...
}
然而,这将使您需要“链接”项目。或者创建一个“Item”类:
public class Item {
public string Amount { get; set; }
public int Item { get; set; }
}
和
public ActionResult MyAction(IList<Item> items){
// ...
}
你的标记应该是:
<input type="hidden" name="items.Index" value="0" />
<input type="text" name="items[0].Amount" id="items[0].Amount">
<select name="items[0].Item">
<option value="1">Item 1"</option>
<option value="2">Item 2"</option>
<option value="3">Item 3"</option>
</select>
<input type="hidden" name="items.Index" value="1" />
<input type="text" name="items[1].Amount" id="items[1].Amount">
<select name="items[1].Item">
<option value="1">Item 1"</option>
<option value="2">Item 2"</option>
<option value="3">Item 3"</option>
</select>
等等...
答案 2 :(得分:6)
我相信如果您有多个名为Amount的字段,则值将以逗号分隔。
要访问每一个,请尝试:
string[] amounts = Request.Form["Amount"].Split(new char[] { ',' });
请注意,输入在提交时不会被清除,因此如果有人在文本框中输入逗号,则会导致问题。
因此我建议给它们编号。
答案 3 :(得分:1)
我最终意识到( blush )JQuery用来查找克隆行(要替换)中的字符串的机制基本上是正则表达式。因此,我只需要摆脱方括号和句号。一旦我这样做,我就可以使用JQuery创建表格,就像Phil Haack的博客所说的那样。
到我的下一期......!
答案 4 :(得分:0)
我会将它们编号为Amount1,Amount2,Amount3等。
答案 5 :(得分:0)
您可以将输入的id和name属性更改为“Amount [1]”,“Amount [2]”,“Amount [3]”(是的,id和name属性可以包含特殊值)字符“[”或“]”)。然后在控制器中编写一个http请求参数解析器以将Amounts作为集合返回。