Serializacja DropDownListy

0

Hej, mam pewien problem w aplikacji asp .net mvc5 - ale akurat ten problem jest bardziej związany z JS. Problem jaki posiadam to : chcę zserializować dropdownlistę która to wykorzystuje (jquery.sumoselect) - i ostatecznie przesłać do kontrolera w aplikacji (z tym nie mam akurat problemu). Problem jaki posiadam, to nie mogę przy próbie wywołania na div'ie metody "serializeArray()" - zwraca mi tylko 1 element który jest wybrany (bez pozostałych wartości "options"). Czyli jeśli mam ddl 5 elementową, to po serializacji otrzymam tylko jeden element ten który w danej chwili jest jako wybrany, a niestety, ale potrzebuję też uzyskać pozostałe opcje

2

Serializacja służy do przekazania wpisanych i wybranych wartości, a nie do tworzenia reprezentacji całego formularza.

Ale jeśli potrzebujesz listę wszystkich opcji, możesz oczywiście użyć sztuczki. Powiedz tylko w jakiej formie chcesz te dane. Możesz np. przy wysyłaniu skopiować wszystkie selecty, dać im inną nazwę, nadać atrybut multiple i zaznaczyć wszystkie opcje, a po wysłaniu usunąć te wszystkie tymczasowe selecty. Nie wiem czy format serializeArray() Cię zadowoli, sam zobacz co z tego się produkuje:

const $container = $('.twoj-formularz'); // podmień na własny selektor

$container.find('select').each(function () {
    const $copy = $(this).clone();
    $copy.attr('data-copy', 'true');
    $copy.attr('name', $(this).attr('name') + '_options');
    $copy.prop('multiple', true);
    $copy.find('option').prop('selected', true);
    $container.append($copy);
});

const serialized = $container.serializeArray();

$container.find('[data-copy]').remove();

// tu robisz co chcesz ze stałą serialized
0

@bearek: Stokrotne dzięki, działa. Żyćko mi uratowałeś :)

0

@bearek: Sorki, że teraz ale mam jeszcze jedno pytanie, bo w console.log(serialized )
Tworzy coś w stylu

{name: "nazwaPropki", value: "Wartosc propki"}
{name: "nazwaPropki", value: "Wartosc propki"}
{name: "nazwaPropki", value: "Wartosc propki"}
...

Jest możliwość wy wyeliminować słowa "name:" oraz "value:" ,ponieważ chciałbym coś w taki formacie:

{"nazwaPropki",  "Wartosc propki"}
{"nazwaPropki",  "Wartosc propki"}
....
0

@bearek: Racja, chwilowe zamulenie miałem :D Racja, Tak jak napisałeś "obiekt z kluczami będącymi nazwą pola i wartościami jako string dla pojedynczej wartości i tablicą dla wielu wartości" Wydaje się być najlepszą opcją

1

Możesz to skonwertować z reduce():

const serialized = $container.serializeArray().reduce(
    (result, input) => ({
        ...result,
        [input.name]: result.hasOwnProperty(input.name) ? [result[input.name], input.value].flat() : input.value
    }),
    {}
);
0

Dzięki teraz po tysiąckroć

1

Taki format wydaje mi się najbardziej naturalny dla danych z formularza. Jakbyś czegoś potrzebował, to daj znać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1