#jquery #asp.net-mvc #jquery-ui #jquery-validate #selectable
#jquery #asp.net-mvc #jquery-пользовательский интерфейс #jquery-validate #выбирается
Вопрос:
У меня есть список элементов, которые я показываю пользователю и разрешаю ему выбрать один или несколько из них, используя выбираемое взаимодействие с пользовательским интерфейсом jQuery. Чтобы отправить выбранные значения обратно в контроллер, я включаю скрытое поле ввода в каждый выбираемый элемент, который я настраиваю с помощью javascript для выбранного события. Вот пример того, как я это настроил
Модель
public class ItemsViewModel
{
public List<Item> Items { get; set; }
}
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public bool Selected { get; set; }
}
HTML
<ul id="Items">
<li>
<label>Item 1</label>
<input type="hidden" id="Items[0]_Id" name="Id" value="1" />
<input type="hidden" id="Items[0]_Selected" name="Items[0].Selected" class="is-selected" value="False" />
</li>
<li>
<label>Item 2</label>
<input type="hidden" id="Items[1]_Id" name="Items[1].Id" value="2" />
<input type="hidden" id="Items[1]_Selected" name="Items[1].Selected" class="is-selected" value="False" />
</li>
</ul>
JavaScript
$('#Items').selectable({
filter: 'li',
selected: function (event, ui) {
$(ui.selected).find('input.is-selected').val('True');
},
unselected: function (event, ui) {
$(ui.unselected).find('input.is-selected').val('False');
}
});
Мой первый вопрос, хотя это работает, это не самое приятное решение. Есть ли у кого-нибудь лучшие способы публикации выбираемых элементов?
Во-вторых, мне нужно убедиться, что пользователь выбрал хотя бы один элемент из списка. Возможно ли подключить проверку на стороне клиента jQuery, чтобы убедиться, что пользователь выбрал хотя бы один элемент? У меня есть некоторые мысли о способах реализации этого, и у меня нет проблем с созданием пользовательского атрибута проверки, но я подумал, что хотел бы спросить, было ли это уже сделано, или лучший способ сделать это, прежде чем я что-то соберу.
Спасибо
Ответ №1:
Вы не показали код, который используете для публикации элементов. Мне кажется, это самое интересное.
Что касается использования скрытых полей, я не знаю, зачем вам это делать. Почему бы просто не заполнить массив элементов в выбранном событии, а затем отправить этот массив при выполнении публикации AJAX?
itemsToPost = [];
$('#Items').selectable({
filter: 'li',
selected: function (event, ui) {
itemsToPost.push( {id: ui.attr('id'), name:ui.text()});
},
...
$.ajax({url : "/whatever/ASPNETMVC/Endpoint",
cache : false,
type : "POST", // http method
dataType: "json",
data : itemsToPost,
error : function(xhr,status,error){
...
},
success : function(msg, arg2, xhr){
...
});
Комментарии:
1. Я определенно думал об этом подходе, но я надеялся получить подход, который позволяет проводить проверку на стороне клиента jQuery в списке выбора с использованием . Атрибуты аннотации чистых данных. И причина, по которой нет никакого кода для публикации элементов, заключается в том, что при использовании скрытых полей asp.net платформа автоматически привязывает поля к модели. Для публикации не требуется код.