【问题标题】:Issue with Html.RadioButtonForHtml.RadioButtonFor 的问题
【发布时间】:2015-02-05 07:29:02
【问题描述】:

我有一个关注类,我正在尝试将其连接到单选按钮

public class ProductFilter
{
    public bool Tubs { get; set; }

    public bool Packs { get; set; }
}

我在视图上使用它

 <div class="row col-lg-12" id="filters">
        <div class="col-lg-4 text-right">
            @Html.RadioButtonFor(model => model.Filter.Tubs, true) Tubs
        </div>
        <div class="col-lg-4"></div>
        <div class="col-lg-4 text-left">
            @Html.RadioButtonFor(model => model.Filter.Packs, true) Packs
        </div>
    </div>

现在当页面加载时,我选择说它回发到控制器并且我能够过滤,当页面重新加载并且我选择打包它回发但两者的值是相同的时,我会认为 tubs 是假的,因为我选择了包,反之亦然,有人能指出我做错了什么吗?

【问题讨论】:

  • 单选按钮设计用于组中(允许从组中选择一个)。您为每个单选按钮指定了不同的名称,因此每个按钮都是不同的组并允许独立选择。不确定您的期望,尤其是当您只有 2 个布尔属性时(因此您应该使用复选框来绑定它们)

标签: c# razor asp.net-mvc-5 radio-button


【解决方案1】:

您似乎想根据“Tubs”或“Packs”的值进行过滤,在这种情况下,您的模型是错误的。您需要一个回发这些字符串中的任何一个的属性,例如

public string Filter { get; set; }
public List<string> FilterList { get; set; }

在控制器中

model.FilterList = new List<string>() { "Tubs", "Packs" };
model.Filter = "Tubs"; // set default

在视图中

@foreach(var option in Model.FilterList)
{
  <label>
    @Html.DropDownListFor(m => m.Filter, option, new { id = option })
    <span>@option</span>
  </label>
}

这将生成 2 个带有 name="Filter" 且值为 value="Tubs"value="Packs" 的单选按钮,并且只允许选择一个。

或者,您可以使用枚举作为过滤器值。

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    相关资源
    最近更新 更多