在POST表单时处理checkboxlists和radiobuttonlists

时间:2009-07-10 15:27:57

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

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

从使用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”的多个元素显然无效。它仍然有效。

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

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

a)否。分配相同的名称绝对是有效的行为 - 这就是单选按钮如何知道他们所属的组(以便当您点击一个组时其他人在同一组中关闭,而其他组则在同一页面不受影响。)

b)是,具有相同的ID无效。我和帮助应用程序有同样的问题。它使整个页面无效,至少对我来说,使任何javascript更难。

不,您不需要ID。但如果存在,它们应该是独一无二的。而且,我不知道整个“名字被弃用”的事情。表格还有什么用呢?在回发时,表单提交ID。请参阅http://www.w3.org/TR/html401/interact/forms.html#edef-INPUT

如果您选择分配ID,则它们可以不同,而不会影响group_processing。事实上,我通常会将它们命名为“OrderOptions-&lt;%= order.option.id%&gt;”。

修改

PS:在http://validator.w3.org/#validate_by_uri+with_options使用html验证程序。它会捕获并通知您重复ID或缺少ID等信息。它也会(如果我没记错的话)告诉你你使用过的弃用元素/属性。

詹姆斯