ASP.NET MVC: jQuery UI Выбор формы публикации и проверки - PullRequest
2 голосов
/ 11 ноября 2011

У меня есть список элементов, которые я показываю пользователю, и позволяю им выбрать один или несколько из них с помощью взаимодействия jQuery UI Selectable. Чтобы отправить выбранные значения обратно в контроллер, я включаю скрытое поле ввода в каждый выбираемый элемент, который я устанавливаю с помощью 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 Ответ

1 голос
/ 11 ноября 2011

Вы не показали код, который вы используете для публикации предметов.Это кажется мне интересным.

Что касается использования скрытых полей, я не знаю, почему вы это сделали.Почему бы просто не заполнить массив элементов в выбранном событии, а затем отправить этот массив при выполнении AJAX POST?

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){
                ...
        });
...