如何发布隐藏值数组

时间:2018-04-17 12:57:05

标签: razor asp.net-core asp.net-core-2.0

我有一个包含列表的模型

public List<Property> Properties { get; set; }

在我的页面中,我将其隐藏为

 if (Model?.Client?.Properties != null)
     {
         foreach (var property in Model.Client.Properties)
         {
             @Html.HiddenFor(x => property.Id)
             @Html.HiddenFor(x => property.Value)
             @Html.HiddenFor(x => property.Key)
         }
     }

我可以在页面上看到他们正在填写

<input id="property_Value" name="property.Value" type="hidden" value="2018-04-17T12:14:36.1126718&#x2B;00:00" />
<input id="property_Key" name="property.Key" type="hidden" value="CreateDate" />
<input id="property_Id" name="property.Id" type="hidden" value="5" />
<input id="property_Value" name="property.Value" type="hidden" value="2018-04-17T12:14:36.1136756&#x2B;00:00" />
<input id="property_Key" name="property.Key" type="hidden" value="UpdateDate" />
<input id="property_Id" name="property.Id" type="hidden" value="6" />
<input id="property_Value" name="property.Value" type="hidden" value="21880" />
<input id="property_Key" name="property.Key" type="hidden" value="FiscalId" />

但是,当发布表单时,会发布其他项的值,但属性列表为空。我猜它与idn或hiden字段的名称有关。

更新

尝试使用for循环。

for (var i = 0 ; i < Model.Client.Properties.Count() ; i++)
         {
             @Html.Hidden($"properties[{i}].id", Model.Client.Properties[i].Id)
             @Html.Hidden($"properties[{i}].value", Model.Client.Properties[i].Value)
             @Html.Hidden($"properties[{i}].key", Model.Client.Properties[i].Key)

         }

给予

 <input id="properties_1__key" name="properties[1].key" type="hidden" value="UpdateDate" />
 <input id="properties_2__id" name="properties[2].id" type="hidden" value="6" />
 <input id="properties_2__value" name="properties[2].value" type="hidden" value="21880" />
 <input id="properties_2__key" name="properties[2].key" type="hidden" value="FiscalId" /> 

不起作用

1 个答案:

答案 0 :(得分:2)

问题是你的foreach循环丢失了属性的上下文。相反,您需要使用经典的for循环并索引属性。例如:

for (var i = 0 ; i < Model.Client.Properties.Count() ; i++)
{
    @Html.Hidden(x => Model.Client.Properties[i].Id)
    @Html.Hidden(x => Model.Client.Properties[i].Value)
    @Html.Hidden(x => Model.Client.Properties[i].Key)
}