我有许多单选按钮组,名为Properties
。属性可以是" color"," size"," height"等等。这些房产有选择权。对于" color",选项可以是" Red"," Blue"等等。当我发布表单时,我能够为每个单独的单选按钮阅读Id
,但我无法访问该组 - Id
s
我正在渲染这样的属性:
for (int i = 0; i < Model.Properties.Count(); i++)
{
<div class="col-lg-3 col-md-4 col-sm-6">
<strong>@Model.Properties[i].Label</strong><br />
@foreach (var option in Model.Properties[i].Options)
{
<label style="font-weight:unset;">
@Html.RadioButtonFor(m => m.Properties[i].SelectedRadioOption, option.Id, new { id = Model.Properties[i].Id })
@option.Value
@Model.Properties[i].Unit
</label>
<br />
}
@Html.ValidationMessageFor(m => m.Properties[i].SelectedRadioOption)
</div>
}
这会生成如下HTML:
<div class="col-lg-3 col-md-4 col-sm-6">
<strong>Size</strong><br />
<label style="font-weight:unset;">
<input checked="checked" data-val="true" data-val-required="The Selected property field is required." id="7012" name="Properties[0].SelectedRadioOption" type="radio" value="7025" />
34 - 36
</label>
<br />
<label style="font-weight:unset;">
<input id="7012" name="Properties[0].SelectedRadioOption" type="radio" value="7026" />
37 - 39
</label>
<br />
<span class="field-validation-valid" data-valmsg-for="Properties[0].SelectedRadioOption" data-valmsg-replace="true"></span>
</div>
<div class="col-lg-3 col-md-4 col-sm-6">
<strong>Colour</strong><br />
<label style="font-weight:unset;">
<input data-val="true" data-val-required="The Selected property field is required." id="7013" name="Properties[1].SelectedRadioOption" type="radio" value="7029" />
Black
</label>
<br />
<label style="font-weight:unset;">
<input id="7013" name="Properties[1].SelectedRadioOption" type="radio" value="7036" />
Pink
</label>
<br />
<span class="field-validation-valid" data-valmsg-for="Properties[1].SelectedRadioOption" data-valmsg-replace="true"></span>
</div>
这是我控制器的POST方法中的一部分,我遍历Properties
:
List<PropertyOptionForProduct> propertyOptions = new List<PropertyOptionForProduct>();
if (VMProduct.Properties != null)
{
for (var i = 0; i < VMProduct.Properties.Count(); i++)
{
propertyOptions.Add(new PropertyOptionForProduct
{
ProductId = VMProduct.Id,
ProductPropertyId = VMProduct.Properties[i].Id, // <-- This is always 0!
ProductPropertyOptionId = (int)VMProduct.Properties[i].SelectedRadioOption
});
}
}
如果我选择&#34; Black&#34;在&#34; Color&#34; -property上,对象如下所示:
PropertyOptionForProduct
{
ProductId = 17008,
ProductPropertyId = 0, // <-- Why not 7013?
ProductPropertyOptionId = 7025
}
上例中ProductPropertyId
的正确值应为7013,即单选按钮标记上的id
- 值。
我做错了什么?
答案 0 :(得分:0)
从html <form>
发回的内容的格式将是(例如)name1=value1&name2=value2
,这会映射到已检查的radiobuttons的名称和值字段。例如,您的代码可能会生成此帖子Properties[0].SelectedRadioOption=7026&Properties[1].SelectedRadioOption=7036
。
服务器不知道你的radiobutton html中的id属性。 id字段不包含在帖子中,除非您在发送之前更改帖子(使用javascript)。因此,您需要在值字段中包含所有标识符,可能与value="1243;34534"
分开,或者您需要使用javascript在发布数据之前将其包含在发布数据中。
答案 1 :(得分:0)
原来,我是个菜鸟。
我需要添加以使其工作的是视图中的这一行剃刀代码:
@Html.HiddenFor(m => m.Properties[i].Id)
现在我可以访问控制器中的Properties[i].Id
值。