我有一个包含列表的模型
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+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+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" />
不起作用
答案 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)
}