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

在发布表单时处理复选框列表和RadioButtonList

  •  0
  • User  · 技术社区  · 17 年前

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

    通过使用asp.net mvc,我看到一个标准选项是创建多个输入并为它们分配相同的“name”属性值。这样地:

    <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”的元素显然是无效的。不过,它仍然有效。

    如果我放弃了标准的helpers并创建了自己的helpers,那么如果我真的不需要它,是否需要将“id”属性插入到inputs中(除了某些标签情况之外)?有些人告诉我们必须始终为元素分配“id”和“name”属性,因为与旧浏览器有些不兼容,而且“name”属性已被弃用(我知道它只适用于其他一些元素)。但是,即使我想这样做,我也必须为输入元素分配不同的id/name值,然后我就不能将它们作为一个组来处理。你看到我的困境了吗?

    任何建议都非常感谢。

    1 回复  |  直到 17 年前
        1
  •  1
  •   James S    17 年前

    a)不。指定相同的名称绝对是有效的行为——这是单选按钮如何知道它们是哪个组的一部分(这样当您单击一个组时,同一组中的其他组将关闭,而同一页上的其他组将不受影响)。

    b)是的,具有相同的id无效。我对帮助程序也有同样的问题。它会使整个页面无效,至少对我来说,会使任何javascript变得更加困难。

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

    如果选择分配ID,则它们可以不同,而不影响组处理。实际上,我通常会将它们命名为“orderoptions-<%=order.option.id%>”。

    编辑:

    ps:使用html验证器 http://validator.w3.org/#validate_by_uri+with_options 是的。它会捕获并通知您重复的id或丢失的id。如果我没记错的话,它还会告诉您您使用的不推荐使用的元素/属性。

    詹姆斯