ASP.NET MVC Listbox

0

Pytanie odnośnie Listbox. Czy istnieje jakiś prosty sposób na usunięcie zaznaczonego elementu z listy? Zrobiłem sobie to w JS, ale czy z poziomu kontrolera w ActionResult jest taka możliwość?

0

O jakie Listbox Ci chodzi? Bo w MVC czegoś takiego nie ma.

0
somekind napisał(a):

O jakie Listbox Ci chodzi? Bo w MVC czegoś takiego nie ma.

hymm..taka forma działa mi poprawnie

@Html.ListBox("...", ....)

czy lepiej korzystać z @ListBoxFor ?

0

z poziomu kontrolera? A jak ładujesz dane do listbox-a ? jak user zaznaczy jakiś element to możesz wywołać akcje w kontrolerze, przesłać ID, wywalić z listy i załadować stronke na nowo - i do tego też JS. Możesz także mieć przycisk i po jego wywołaniu będziesz miał akcje w kontrolerze która usuwa.

0

Poszczególne rekordy są ładowane z textboxa i zatwierdzane buttonem. Wyczyszczenie samej listy nie stanowi problemu, tylko chodzi mi o to czy jest możliwość usunięcia zaznaczonego rekordu również po zatwierdzeniu buttonem bez używania JS. Nie doszukałem sie jak przechwycić aktualnie zaznaczoną pozycję na liście.

1

chyba nie bardzo kumasz jak to wszystko dziala, a na moje oko przesiadles sie w aplikacji desktopowych a HTTP jest protokolem bezstanowym i tu wszytsko dziala na zasadzie przesylania danych, miedzy widokiem a kontrolerem. to co robisz to bawisz sie w zmiany listy po stronie przegladarki i wyglad itp, ale po nacisnieciu submita, caly formularz z danymi zostanie wyslany do kontrolera i wsrod tych danych z formularza bedzie takze twoja zaznaczona wartosc z listy (w jakim polu nie wiem bo nie wiem pod co podpiales), i teraz bazujac na tym musisz jescze raz wygenerowac swoja liste, ale nie dodawac wybranej opcji lub usunac ja z listy, ale to wszystko robisz w kontrolerze, ktory potem zwroci dane do widoku.

ogolnie tak sie nie robi, bo zmiane listy robic najlepiej za pomoca javascript, zeby wlasnie nie przerzucac tych danych miedzy akcjami kontrolera (tak musisz ze przerzucac bo nic nie zapamieta pozostalychpol i musisz je generowac za kazdym razem, eew. przesylac). wiec powiedz co chcesz osiaganc a my ci powiemy najlepszy ku temu sposob;)

1
szalonyfacet napisał(a):

ogolnie tak sie nie robi, bo zmiane listy robic najlepiej za pomoca javascript, zeby wlasnie nie przerzucac tych danych miedzy akcjami kontrolera (tak musisz ze przerzucac bo nic nie zapamieta pozostalychpol i musisz je generowac za kazdym razem, eew. przesylac). wiec powiedz co chcesz osiaganc a my ci powiemy najlepszy ku temu sposob;)

i właśnie o to mi chodziło. Czyli optymalne i jedyne słuszne w takich przypadkach jest stosowanie JS?

Zastanawiałem się po prostu czy nie ma jakiejś szybszej metody do przechwycenia samej zaznaczonej wartości i usunięcie jej w metodzie Action Result kontrolera (tak jak dodawanie rekordu i czyszczenie całej listy (oczywiście tylko po stronie przeglądarki):

MojaLista.Clear();
MojaLista.Add(".....");

Ćwiczenie wygląda tak: do textboxa wpisuje rekord i zatwierdzam submitem. Rekord pojawia się w listBox. Zaznaczam go i usuwam za pomocą kolejnego przycisku "usuń rekord".

1

musisz rozdzielic co dzieje sie po stronie serwera a co po stronie przegladarki. to co ty robisz to robisz po stronie przegladarki a po nacisnieciu submit formularza dane zostana zbindowane do odpowiedniego modelu i tu dziala juz serwer.

ty robisz wszystko po stronie przegladarki, wiec robisz to javascriptem i jestes w bledzie jak myslisz ze wyslesz sobie tego listboxa do kontrolera ;) po wygenerowaniu tych opcji w multiselectie i wyslaniu ich, NIC SIE NIE PRZESLE do kontrolera, a to dlatego ze kontroler zbinduje tylko zaznaczone opcje, wiec albo w trakcie operacji dodawania i usuwania tworz sobie ukryte pole ze stringiem w ktorym zapiszesz wartosci tych pol w stringu oddzielone srednikiem czy jakims innym znakiem a w kontrolerze je bedziesz parsowal, albo jak ja bym to zrobil, przed wyslaniem formularza odpalil skrypt ktory wszystkie wartosci w multiselect ustawi na selected (oczywiscie musi byc to multiselect,a nie sam select) a binder juz przerobi to na liste.

mozna jeszcze tworzyc ukryte pola o nazwie nazwapola[] wtedy zostana zbindowane do listy, ale to zabawa z DOMem juz co mi sie osobiscie nie podoba. odpalenie skrypciku przed wyslaniem formularza zalatwi sprawe bo na wyjsciu dostaniesz liste stringow z wartosciami.

1

Dzięki bardzo za cenne uwagi:)

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