如何通过表单提交将嵌套数据发布到ActionResult参数中? 我一直试图实现一个类似于this question答案的解决方案,但运气不好。
有关表格的部分结构如下:
<form method="post" action="/Product/Edit" class="tabs">
<input name="Prices[1].Price" id="Prices_1__Price" value="9.99" type="text">
<input name="Prices[1].Size2Price" id="Prices_1__Size2Price" value="0.00" type="text">
<input name="Prices[1].Size3Price" id="Prices_1__Size3Price" value="0.00" type="text">
<input name="Prices[2].Price" id="Prices_2__Price" value="5.00" type="text">
<input name="Prices[2].Size2Price" id="Prices_2__Size2Price" value="0.00" type="text">
<input name="Prices[2].Size3Price" id="Prices_2__Size3Price" value="0.00" type="text">
<input name="Prices[3].Price" id="Prices_3__Price" value="0.00" type="text">
<input name="Prices[3].Size2Price" id="Prices_3__Size2Price" value="0.00" type="text">
<input name="Prices[3].Size3Price" id="Prices_3__Size3Price" value="0.00" type="text">
<button type="submit">submit</button>
</form>
这在日志中很正常,发布的数据按预期显示:
Form Submission Event: (BaseController:57-ish):
{
...
"Prices[1].Price": "9.9900",
"Prices[1].Size2Price": "0.0000",
"Prices[1].Size3Price": "0.0000",
"Prices[2].Price": "5.5800",
"Prices[2].Size2Price": "0.0000",
"Prices[2].Size3Price": "0.0000",
"Prices[3].Price": "0.0000",
"Prices[3].Size2Price": "0.0000",
"Prices[3].Size3Price": "0.0000",
...
}
在模型中,我一直在尝试变种以试图捕捉价格的集合,目前的尝试如下:
[DataContract]
public class EditedProductEntry
{
[DataContract]
public struct PriceCollection
{
[DataMember( Name = "Price" )]
public string Price { get; set; }
[DataMember( Name = "Size2Price" )]
public string Size2Price { get; set; }
[DataMember( Name = "Size3Price" )]
public string Size3Price { get; set; }
}
...
[DataMember( Name = "Prices" )]
public PriceCollection[] Prices { get; set; }
...
}
在Controller端,我有“Edit”ActionResult,它接收“EditedProductEntry”数据结构:
[HttpPost]
[Route( "Edit", Name = "Product_Edit" )]
public ActionResult Edit( EditedProductEntry post )
{
...
}
我一直在摆弄“post”参数的结构,试图让它接受“价格”集合,但这让我很难过。剩下的数据正在通过精细和正在填充“EditedProductEntry”对象,但是该集合在保持为空时是坚定的。
我试过捕捉一个对象[],EditedProductEntry [],ICollection,IEnumerable&amp;我们也尝试将这些指定为“编辑”动作的附加参数,但到目前为止我还没有运气。
有没有人有其他想法?
答案 0 :(得分:1)
我在本地计算机上尝试了相同的情况,并发现控件名称的索引不正确。
控件名称应该遵循基于零的索引,因此也应该发布正在发布的数据。
输入控件应声明如下。
<input name="Prices[0].Price" id="Prices_1__Price" value="9.99" type="text">
<input name="Prices[0].Size2Price" id="Prices_1__Size2Price" value="0.00" type="text">
<input name="Prices[0].Size3Price" id="Prices_1__Size3Price" value="0.00" type="text">
<input name="Prices[1].Price" id="Prices_2__Price" value="5.00" type="text">
<input name="Prices[1].Size2Price" id="Prices_2__Size2Price" value="0.00" type="text">
<input name="Prices[1].Size3Price" id="Prices_2__Size3Price" value="0.00" type="text">
<input name="Prices[2].Price" id="Prices_3__Price" value="0.00" type="text">
<input name="Prices[2].Size2Price" id="Prices_3__Size2Price" value="0.00" type="text">
<input name="Prices[2].Size3Price" id="Prices_3__Size3Price" value="0.00" type="text">
因此日志文件也会有以下数据。
"Prices[0].Price": "9.9900",
"Prices[0].Size2Price": "0.0000",
"Prices[0].Size3Price": "0.0000",
"Prices[1].Price": "5.5800",
"Prices[1].Size2Price": "0.0000",
"Prices[1].Size3Price": "0.0000",
"Prices[2].Price": "0.0000",
"Prices[2].Size2Price": "0.0000",
"Prices[2].Size3Price": "0.0000",
进行此更改可以解决您的问题。