Как создать пустой список и передать параметры без их выбора? - PullRequest
5 голосов
/ 23 июня 2011

В моей форме я перемещаю категории из одного списка в другой, как это:
enter image description here

Нижний блок - это поле "input" , которое читаетсяна стороне сервера, когда форма размещена.Вот как я создаю список:

<%: Html.ListBoxFor(m => m.categories, Model.categories)%>

У меня здесь две проблемы:

  1. В Firefox , когда форма загруженав первый раз нижний блок всегда имеет значение по умолчанию <option></option>.Можно ли удалить это на стороне сервера? IE похоже создает пустое поле, но не FF.
    Чтобы решить эту проблему, я удаляю пустую опцию при загрузке страницы.Одна из проблем заключается в том, что когда форма имеет ошибку и не отправлена, параметры снова удаляются.

  2. Для того, чтобы варианты в нижнем поле были опубликованы, они имеютбыть выбранным.Чтобы решить эту проблему, я использовал jQuery ниже, чтобы выбрать параметры для публикации формы.


jQuery для выбора параметров при отправке:

$("form").submit(function (event) {
    $("#categories").find("option").attr('selected', 'selected');  
});

jQueryудалить опцию при загрузке:

$("#categories").find("option").remove();

ВОПРОСЫ
1. Могу ли я создать пустой список, работающий во всех браузерах?
2. Нужно ли выбиратьварианты в нижнем поле или есть обходной путь?

Пояснение: я бы хотел, чтобы как можно больше делалось на стороне сервера, желательно с чем-то связанным с MVC.

Ответы [ 4 ]

1 голос
/ 23 июня 2011

Firefox имеет ту особенность, которая требует от него создания пустого элемента для фактического отображения элемента select.Боюсь, вы не сможете обойти это.Однако возможный обходной путь для # 2 может устранить ваши опасения по поводу # 1.

Если вы создадите обработчик события jQuery click для кнопок добавления и удаления, чтобы создавать и уничтожать скрытые входы с одинаковым атрибутом имени для каждого значенияэто визуально перемещается между блоками, они поступят в виде строки CSV в соответствующем члене коллекции Request.Form, которую можно превратить в массив значений, вызвав:

Request.Form("myHiddenInputName").Split({","c})

или эквивалентный код C #.Вам не нужно выбирать элементы при отправке, и вам не нужно беспокоиться о том, чтобы отсеять пустое значение, которое Firefox создает на стороне сервера.Конечно ... это может быть не самый привлекательный обходной путь в архитектуре MVC, но это был мой первый ответ, поэтому я решил поделиться.

1 голос
/ 23 июня 2011

1: Вместо удаления всех опций просто удалите пустые, таким образом, он не будет сброшен.

$('#mySelect option').each(function () {
    if(!$(this).val())
        $(this).remove();
});

http://jsfiddle.net/yWHLW/5/

1 голос
/ 23 июня 2011

1. http://jsfiddle.net/wVWGm/ проверить совместимость браузера для пустого списка.

2

$("form").submit(function (event) {
    $("#categories").find("option:selected");  
});
0 голосов
/ 24 июня 2011

Почему бы вам не создать список со списком, используя простой HTML; вместо использования помощника

<select style="width: 370px;" class="cmbBox1" id="ServicesList" 
multiple="multiple" name="ServicesList" size="8"></select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...