Работа с флажками и списками радиокнопок при отправке форм - PullRequest
0 голосов
/ 10 июля 2009

Как правильно создать и обработать группу связанных элементов управления в опубликованных формах?

При использовании 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» и «name» элементам, потому что есть некоторая несовместимость со старыми браузерами, и атрибут «name» устарел (я знаю, что это только для некоторых других элементов) Но даже если бы я захотел, мне бы пришлось назначить разные значения идентификатора / имени для элементов ввода, и тогда я не смогу обработать их как группу. Вы видите мою дилемму?

Любой совет с благодарностью.

1 Ответ

1 голос
/ 10 июля 2009

a) Нет. Назначение одного и того же имени - определенно правильное поведение - это то, как переключатели знают, в какую группу они входят (чтобы другие в той же группе отключались при нажатии одной, а другие группы на та же страница не затрагивается).

б) Да, наличие одного и того же идентификатора недействительно. У меня такая же проблема с вспомогательными приложениями. Это делает всю страницу недействительной и, по крайней мере для меня, делает любой javascript более сложным.

Нет, вам не нужно удостоверение личности. Но если они существуют, они должны быть уникальными. Кроме того, я не знаю всей этой вещи как "осуждаемого имени". Как еще будут работать формы? Формы не отправляют идентификатор при отправке сообщения обратно. См http://www.w3.org/TR/html401/interact/forms.html#edef-INPUT.

Если вы решите назначить ID, они могут отличаться, не влияя на group_processing. На самом деле я обычно называю их как-то вроде «OrderOptions - <% = order.option.id%>».

EDIT:

PS: используйте html-валидатор на http://validator.w3.org/#validate_by_uri+with_options. Он будет ловить и уведомлять вас о таких вещах, как дубликаты или отсутствующие идентификаторы. Он также (если я правильно помню) расскажет вам об устаревших элементах / атрибутах, которые вы используете.

Джеймс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...