如何获取单选按钮组的ID?

时间:2018-04-20 06:43:14

标签: c# asp.net-core-mvc

我有许多单选按钮组,名为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 - 值。

我做错了什么?

2 个答案:

答案 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值。