2010-07-08 17 views
7

Mam działanie, które zależy od listy liczb całkowitych. Moim pierwszym instynktem było po prostu zadeklarowanie akcji z Listą.Jak przekazać listę liczb całkowitych do działania MVC?

Próbowałem uznając skargę na kontrolera jako:

public ActionResult EditMultiple(List<int> ids) 

i moim zdaniem rozmowy tak:

<%= Html.ActionLink("EditMultiple", "EditMultiple", new { ids = new List<int> {2, 2, 2} })%> 

Chociaż kompiluje lista jest pusta, kiedy kładę breakpoint w akcja. Ktoś wie, dlaczego lub ma alternatywne podejście?

Dodanie więcej szczegółów na temat scenariusza:

Próbuję „Edit” wielu podmiotów jednocześnie. Jestem już na etapie, w którym mam aplikację, która pozwala mi tworzyć/edytować/wyświetlać informacje o książkach w bibliotece. Mam częściowy widok, który pozwala użytkownikowi na edycję informacji o pojedynczej książce i zapisanie jej w bazie danych.

Teraz chciałbym utworzyć widok, który pozwala użytkownikowi edytować informacje o wielu książkach za pomocą jednego przycisku przesyłania. Stworzyłem akcję EditMultiple, która właśnie renderuje częściowe dla każdej książki (mój model dla tego widoku to List) i dodaje później przycisk Wyślij.

+0

co publikujesz w akcji? –

+0

W tym przypadku mój powyższy przykład jest nieco bliski mojemu prawdziwemu scenariuszowi. To jest GET, a nie POST. Zaktualizuję opis o więcej informacji o rzeczywistym scenariuszu. – Justin

Odpowiedz

4

Tak. Domyślny segregator modelu może powiązać "identyfikatory" z dowolnym elementem ICollection. Ale musisz przesłać wiele parametrów o tej samej nazwie. To eliminuje użycie metody pomocniczej "ActionLink". Można użyć url pomocnika akcja i dołączyć identyfikatory do łącza tak:

<a href="<%= Url.Action("CreateMultiple")%>?ids=2&ids=1&ids=3">Test link</a> 

Here's the link z bloku HAACK za.

+0

To działa dzięki. nie używaj helpera HTML, ale wartości zakodowane na stałe służą tylko do prototypowania, więc to wystarczy. – Justin

2

nie sądzę

new List<int> {2, 2, 2} 

zostanie poprawnie przekształcony w POST, który jest Bindable, chcesz wysłać

Ids=1&Ids=2&Ids=3 

przecinek oddzielną listę może również pracować, nie jestem pewien, I don” t użyj fatalnego domyślnego modelu do modelowania.

Dlaczego tak robisz? Mam nadzieję, że to pseudokod dla czegoś innego ...

+0

więcej informacji dodanych do pytania. Oczywiście nie edytuję książek, ale dla celów tej dyskusji jest to wystarczająco dobre. Jeśli potrafisz wymyślić lepszy sposób edytowania wielu książek niż tworzenie akcji dla EditMultiple, która renderuje częściowe dla każdego modelu na liście, to proszę, jestem uszy. To moja pierwsza prawdziwa aplikacja MVC, więc wciąż uczę się schematów i wzorów. – Justin

+0

W związku z tym należy zwrócić uwagę na przyszłych ludzi, którzy próbują dowiedzieć się, tak jak ja, o tym, jak przesłać do działania MVC, gdy klient również złożył podanie programowe (za pośrednictwem FormUrlEncodedContent): oznacza to po prostu przelot i dodanie tego samego klucza do listy KVP tworzymy FormUrlEncodedContent z, wiele razy, z różnymi wartościami (jest to przecież tylko List , a nie właściwym Słownikiem, więc jest dozwolone (i działało!) – neminem

Powiązane problemy