如何使用文本框值在单选按钮上设置值

时间:2018-08-16 13:16:37

标签: c# asp.net-mvc

我的模型中有一个属性,用于定义用户要插入的数量。

为此,我使用3个单选按钮,如下所示:

enter image description here

我为此使用的代码如下:

<div>
    @Html.RadioButtonFor(m => m.LabelsQuantity, "100", new { @class = "custom-control-inline radiobtn" }) @Html.Label("100", new { @class = "custom-label-inline " })
</div>
<div>
    @Html.RadioButtonFor(m => m.LabelsQuantity, "1000", new { @class = "custom-control-inline radiobtn" }) @Html.Label("1000", new { @class = "custom-label-inline " })
</div>
<div>
    @Html.RadioButtonFor(m => m.LabelsQuantity, "Other"  , new { @class = "custom-control-inline radiobtn" }) @Html.Label("Others", new { @class = "custom-label-inline " })
</div>
<div>
    @Html.TextBoxFor(m => m.LabelsQuantity, string.Empty, new { @class = "custom-control-inline form-control enable_tb", type = "number", disabled = "true" })
</div>

问题是我在文本框中插入的值没有传递给控制器​​,只有 other 字符串传递给了控制器。

我需要能够覆盖视图中的值,或者必须能够在控制器的文本框中获取值。

有帮助吗?谢谢。

2 个答案:

答案 0 :(得分:1)

您需要为Others文本框引入另一个属性,该属性将为其发布值:

<div>
    @Html.RadioButtonFor(m => m.LabelsQuantity, "100", new { @class = "custom-control-inline radiobtn" }) @Html.Label("100", new { @class = "custom-label-inline " })
</div>
<div>
    @Html.RadioButtonFor(m => m.LabelsQuantity, "1000", new { @class = "custom-control-inline radiobtn" }) @Html.Label("1000", new { @class = "custom-label-inline " })
</div>
<div>
    @Html.RadioButtonFor(m => m.LabelsQuantity, "Other"  , new { @class = "custom-control-inline radiobtn" }) @Html.Label("Others", new { @class = "custom-label-inline " })
</div>
<div>
    @Html.TextBoxFor(m => m.Others, string.Empty, new { @class = "custom-control-inline form-control enable_tb", type = "number", disabled = "true" })
</div>

并在模型中:

public class ViewModel
{
    public string LabelsQuantity { get; set; }
    ...............
    ...............
    public string Others { get; set; }
}

现在,在控制器中,您需要检查是否选中了其他单选按钮,使用文本框中提供的选定值。

答案 1 :(得分:1)

您的视图模型需要第二个属性来绑定文本框。 memcpy仅绑定第一个匹配的名称/值对,因此它将在请求中看到DefaultModelBinder,并将其设置为您的LabelsQuantity=Other属性,而忽略LabelsQuantity。 / p>

更改模型以包含其他属性,例如

LabelsQuantity=ValueFormTheTextBox

并使用

绑定到视图中
public string OtherQuantity { get; set; }

您还应该考虑应用条件验证属性,例如foolproof @Html.TextBoxFor(m => m.OtherQuantity) 属性,以便获得客户端和服务器端验证

还请注意,如果文本框的值应始终为数字,则应将属性设为[RequiredIf("LabelsQuantity", "Other"]而不是int