【问题标题】:Dealing with checkboxlists and radiobuttonlists when POSTing formsPOST 表单时处理复选框列表和单选按钮列表
【发布时间】:2009-07-10 15:27:56
【问题描述】:

在已发布的表单上创建和处理一组相关控件的正确方法是什么?

通过使用 ASP.NET MVC,我看到一个标准选项是创建多个输入并为它们分配相同的“名称”属性值。像这样:

<input name="OrderOptions" type="checkbox" value="1" />
<input name="OrderOptions" type="checkbox" value="2" />
...
<input name="OrderOptions" type="checkbox" value="N" />

在处理表单时,我们会在逗号分隔的字符串中获取所有值:

public OrderController
{
    public ActionResult (FormCollection form)
    {
        string selection = form["OrderOptions"];
    }
}

现在,任何服务器技术都应该这样做吗?为输入分配相同的名称值会破坏某些验证规则吗?

一个额外的问题:如果我要使用内置的 HTML 帮助程序,我会得到使用“id”和“name”属性生成的输入。像这样:

<input id="OrderOptions" name="OrderOptions" type="checkbox" value="1" />
<input id="OrderOptions" name="OrderOptions" type="checkbox" value="2" />
...
<input id="OrderOptions" name="OrderOptions" type="checkbox" value="N" />

但是在一个文档中有多个具有相同“id”的元素显然是无效的。不过,它仍然有效。

如果我放弃标准助手并自己制作,如果我真的不需要它,是否需要在输入中插入“id”属性(某些标签情况除外)?有些人告诉我们必须始终为元素分配“id”和“name”属性,因为与旧浏览器存在一些不兼容,并且“name”属性已被弃用(我知道它仅适用于其他一些元素)。但即使我愿意,我也必须为输入元素分配不同的 id/name 值,然后我无法将它们作为一个组进行处理。你看到我的困境了吗?

非常感谢任何建议。

【问题讨论】:

    标签: asp.net asp.net-mvc html


    【解决方案1】:

    a) 不。分配相同的名称绝对是有效的行为 - 这是单选按钮知道它们属于哪个组的方式(这样当您单击一个时,同一组中的其他人会关闭,而同一页面不受影响)。

    b) 是的,拥有相同的 ID 是无效的。我对帮助应用程序有同样的问题。它使整个页面无效,并且至少对我而言,使任何 javascript 变得更加困难。

    不,您不需要 ID。但如果它们存在,它们应该是独一无二的。此外,我不知道整个“名称被弃用”的事情。表格还能如何工作?表单在回发时提交 ID。见http://www.w3.org/TR/html401/interact/forms.html#edef-INPUT

    如果您选择分配 ID,它们可以不同而不影响 group_processing。事实上,我通常会将它们命名为“OrderOptions-”。

    编辑:

    PS:在 http://validator.w3.org/#validate_by_uri+with_options 使用 html 验证器。它会捕获并通知您诸如重复 ID 或丢失 ID 之类的事情。它还会(如果我没记错的话)告诉您您使用的已弃用的元素/属性。

    詹姆斯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-14
      • 2022-12-22
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多