【问题标题】:asp.net mvc4 RadioButtonList not select multiple radiobuttonasp.net mvc4 RadioButtonList 不选择多个单选按钮
【发布时间】:2013-11-15 22:55:49
【问题描述】:

我正在使用带有 razor 和 javascript 的 ASP.net MVC4 在此图像中,我无法选择多个收音机,当我选择一个选项时,选择的另一个选项保持干净且未选中。

这是我的代码:

 @foreach (var item in ViewBag.DatosInfVehiFE){
  <tbody>
<tr>
 <td>@item.cprp_descripcion</td>
 <td>@item.piv_cantidad</td>
 <td>@item.cprp_idpartepre</td>
 <td>     
    @Html.RadioButtonFor(m => m.parestadopieza, Crd.Web.Areas.Inspeccion.Models.v_PreInformacionVehi.Estado.Bueno, new { id = string.Format("B_{0}", item.cprp_idpartepre.ToString()) }) Bueno
    @Html.RadioButtonFor(m => m.parestadopieza, Crd.Web.Areas.Inspeccion.Models.v_PreInformacionVehi.Estado.Regular, new { id = string.Format("R_{0}", item.cprp_idpartepre.ToString()) }) Regular
    @Html.RadioButtonFor(m => m.parestadopieza, Crd.Web.Areas.Inspeccion.Models.v_PreInformacionVehi.Estado.Deficiente, new { id = string.Format("D_{0}", item.cprp_idpartepre.ToString()) }) Deficiente                 
     </td>                
 <td>@item.piv_observacion</td>      

}

如何为每一行选择一个选项?

这是我的控制器

[HttpPost]
    public ActionResult InsInformacionVehiculo(string IdInspeccion)
    {
        ViewBag.IdInspeccion = IdInspeccion;
        List<Models.v_PreInformacionVehi> ListaInfVehi = InformacionVehiculo("INP0001", "", "").ToList();
        List<Models.v_PreInformacionVehi> ListaFrontalExt = ListaInfVehi.Where(e => e.cprp_partipoiv == "E" && e.cprp_parsubtipoiv == "F").ToList();
        ViewBag.DatosInfVehiFE = ListaFrontalExt;
        return PartialView("~/Areas/Inspeccion/Views/raAcc/_DatosInfoVehiculo.cshtml");           
    }

ListaFrontaExt 是这个数据(图像)在哪里(这个发送 ViewBag 到 partialview _DatosInfoVehiculo.cshtml

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 razor html-helper


    【解决方案1】:

    你需要使用for循环:

    @for (var i = 0; i < ViewBag.DatosInfVehiFE.Count; i++)
    {
      <tbody>
    <tr>
     <td>@ViewBag.DatosInfVehiFE[i].cprp_descripcion</td>
     <td>@ViewBag.DatosInfVehiFE[i].piv_cantidad</td>
     <td>@ViewBag.DatosInfVehiFE[i].cprp_idpartepre</td>
     <td>     
        @Html.RadioButton(String.Format("[{0}].parestadopieza", i), Crd.Web.Areas.Inspeccion.Models.v_PreInformacionVehi.Estado.Bueno, new { id = string.Format("B_{0}", ViewBag.DatosInfVehiFE[i].cprp_idpartepre.ToString()) }) Bueno
        @Html.RadioButton(String.Format("[{0}].parestadopieza", i), Crd.Web.Areas.Inspeccion.Models.v_PreInformacionVehi.Estado.Regular, new { id = string.Format("R_{0}", ViewBag.DatosInfVehiFE[i].cprp_idpartepre.ToString()) }) Regular
        @Html.RadioButton(String.Format("[{0}].parestadopieza", i), Crd.Web.Areas.Inspeccion.Models.v_PreInformacionVehi.Estado.Deficiente, new { id = string.Format("D_{0}", ViewBag.DatosInfVehiFE[i].cprp_idpartepre.ToString()) }) Deficiente                 
         </td>                
     <td>@ViewBag.DatosInfVehiFE[i].piv_observacion</td>
    }
    

    问题是Html.RadioButtonFor 为所有单选按钮生成相同的名称,因此它将它们视为一个组。

    【讨论】:

    • 您可以使用具有相同代码的模型将动态名称输入其中
    • @ShayanNafisi 助手已经在内部为单选按钮生成名称。将其作为new { name = // ... } 的一部分提供是重复工作。让助手为您完成工作。
    • @ShayanNafisi 另外,为什么要投反对票?这是正确的解决方案。
    • @ShayanNafisi 谢谢。要解释我上面对名称的评论,请尝试使用Html.RadioButtonFor(m =&gt; m.Whatever, ...),并且不要提供任何new { name = something }。然后检查生成的 HTML,你会看到它自动添加了一个name 属性。
    • @ShayanNafisi 哈哈,没问题。只是想确保你明白我在说什么。 :)
    【解决方案2】:

    使用 RadioButton (http://msdn.microsoft.com/en-us/library/dd492690%28v=vs.108%29.aspx)

    <ol class="Opt">
    @foreach (var opt in quest.Options)
    {
        <li>
            @Html.RadioButton("uniqueRadio", opt.Title)
            @Html.Label(opt.Title)
        </li>
    }
    </ol>
    

    【讨论】:

      【解决方案3】:

      为每个集合使用不同的名称

              @foreach (var item in ViewBag.DatosInfVehiFE){
                <tbody>
      
                    <tr>
                        <td>@item.cprp_descripcion</td>
                        <td>@item.piv_cantidad</td>
                        <td>@item.cprp_idpartepre</td>
                        <td>     
                            @Html.RadioButtonFor(m => m.parestadopieza, Crd.Web.Areas.Inspeccion.Models.v_PreInformacionVehi.Estado.Bueno, new { id = string.Format("B_{0}", item.cprp_idpartepre.ToString()) , @name=item.name }) Bueno
                            @Html.RadioButtonFor(m => m.parestadopieza, Crd.Web.Areas.Inspeccion.Models.v_PreInformacionVehi.Estado.Regular, new { id = string.Format("R_{0}", item.cprp_idpartepre.ToString()), @name = item.name }) Regular
                            @Html.RadioButtonFor(m => m.parestadopieza, Crd.Web.Areas.Inspeccion.Models.v_PreInformacionVehi.Estado.Deficiente, new { id = string.Format("D_{0}", item.cprp_idpartepre.ToString()), @name = item.name }) Deficiente                 
                        </td>                
                        <td>@item.piv_observacion</td>  
                    </tr>
      
                </tbody>
                }
      

      更多示例:How to identify which radio button is accepted?

      【讨论】:

      • @Jared:你是对的,修复它。您应该为每个组设置一个名称并使用值来找出选择了哪个组。
      • 嗨 Shayan Nafise 我添加了@name 而不是功能,我无法选择多个单选,只允许我选择一个单选按钮
      猜你喜欢
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 2013-11-15
      • 2011-01-03
      相关资源
      最近更新 更多