代码之家  ›  专栏  ›  技术社区  ›  boj

在ASP.NET MVC中使用HTML RadioButton数组

  •  0
  • boj  · 技术社区  · 15 年前

    我试着跟着 this 但是默认的ModelBinder让我的数组在服务器端为空。

    HTML:

    Question 1:
    <input name="list[0]" type="radio" value="1000" />No
    <input name="list[0]" type="radio" value="1001" />Yes
    Question 2:
    <input name="list[1]" type="radio" value="1002" />No
    ...
    

    控制器动作:

     public ActionResult Anamnesis(string[] list)
     {
    

    如果我只选择第二个“否”(缺少列表[0]),那么DefaultModelBinder将无法将其转换为数组。

    提前谢谢!

    更新第1号

    基于评论重新格式化,谢谢!

    更新第2号

    只是一个难题:创建了一个隐藏的输入 之后 所有列表项,以这种方式工作。但毫无疑问,它很难看。

    Question 1:
    <input name="list[0]" type="radio" value="1000" />No
    <input name="list[0]" type="radio" value="1001" />Yes   
    <input type="hidden" name="list[0]"/>
    Question 2:
    <input name="list[1]" type="radio" value="1002" />No
    <input type="hidden" name="list[1]"/>
    ...
    

    命令它 非常 重要提示:隐藏值仅在未选中收音机时提交。这个想法来自ASP.NET MVC帮助程序。(btw我不能使用html.radiobutton来存档此行为。)

    2 回复  |  直到 8 年前
        1
  •  0
  •   Funka    15 年前

    您的更新2似乎解决了您的问题。您的更新2也很有趣,因为您还可以使用此方法来提供一个默认值(如999),以便在未检查任何内容时使用。

    也许还有另一种类似的方法来做你所要求的事情,这是基于 this article 它也使用隐藏的输入。这样做的目的是,您可以为每台无线电机创建索引,以避免表单中前面丢失的选择导致删除所有后续选择的情况:

    Question 1:
    <input name="list.Index" type="hidden" value="0" />
    <input name="list[0]" type="radio" value="1000" />No
    <input name="list[0]" type="radio" value="1001" />Yes
    Question 2:
    <input name="list.Index" type="hidden" value="1" />
    <input name="list[1]" type="radio" value="1000" />No
    <input name="list[1]" type="radio" value="1001" />Yes
    

    我建议这样做的原因是,在这种情况下,您可能希望通过一个唯一的ID将您的答案与一个特定的问题关联起来,而不只是使用0、1、2等。我链接的文章将显示一个如何做到这一点的示例。

    祝你好运!
    -迈克

        2
  •  -1
  •   eulerfx    15 年前

    单选按钮的name属性应该是list,而不是list[n]。