我如何区分RadioButtons?

时间:2017-08-23 09:00:40

标签: c# asp.net-mvc razor

我在每次迭代时都有一个带RadioButton的for循环。我的问题是,一旦我验证了表单(如何检索它们的值?),我不知道如何区分每一个RadioButton。我有一个打印机型号:

public class Printer{
     public int id{ get; get;}
     public string printerName { get; set; }
}

它本身是另一个模型的一部分:

public class FinalSiteModel 
{
    public string name{ get; set; }
    public List<Printer> printers{ get; set; }
    public bool selected { get; set; }
}

然后我将它传递给视图:

for(var i = 0; i < Model.printers.Count() ; i++)
{
    @Html.RadioButtonFor(m => m.selected, new {  Name = "groupRadio"});
    @Html.Label(Model.printers[i].printerName);
}

我认为我编写RadioButton的方式有问题。我最初在selected内部使用了布尔PrinterModel,但我的问题来自于自从我使用以来无线电按钮没有分组的事实

@Html.RadioButtonFor(m => m.printers[i].selected, new {  Name = "groupRadio"});

并且这一位:m => m.printers[i].selected为每个单选按钮创建了一个不同的名称,因此当我同时检查几个单选按钮时,我不想这样做。

我猜我应该在RadioButtonFor添加一个参数?

1 个答案:

答案 0 :(得分:2)

您的单选按钮需要一个值才能绑定到selected属性。但是,该属性必须为int,而不是bool

public class FinalSiteModel 
{
    ...
    public List<Printer> Printers { get; set; }
    public int SelectedPrinter { get; set; }
}

然后在视图中

foreach(var printer in Model.Printers)
{
    <label>
        @Html.RadioButtonFor(m => m.SelectedPrinter, printer.Id, new { id = "" })
        <span>@printer.Name</span>
    </label>
}

请注意,RadioButtonFor()的第二个参数会根据value的{​​{1}}属性添加Id属性,Printer会移除new { id = "" } id由于该方法生成重复项

,否则该属性将无效

当您发布表单时,SelectedPrinter的值现在将包含所选Id的{​​{1}}。

作为旁注,请勿尝试使用Printer更改name属性 - 它不会绑定到您的模型。