2009-02-12 9 views
5

Mam scenariusz, na którym utknąłem - Mam obiekt domeny, do którego dołączono kolekcję obiektów. Coś w tym stylu:ASP.NET MVC - obsługa wielu obiektów w jednej formie

public class Person 
{ 
    public string Name { get; set; } 
    public IList<PhoneNumber> PhoneNumbers {get; set; } 
    public IList<Address> Addresses { get; set; } 
} 

Interfejs użytkownika, którego chce klient, ma pojedynczy formularz do wprowadzania i edycji. Użytkownik może wpisać 0 do wielu telefonów/adresów dla każdej osoby. Jak obsłużyć wysyłanie kolekcji wartości z powrotem do kontrolera?

Mogę wymyślić kilka podejść, ale wszystkie wydają się brutalne i niezbyt eleganckie. Czy istnieje najlepsza praktyka radzenia sobie z tego rodzaju problemem?

Odpowiedz

0

W przeszłości używałem do tego konwencji railsy.

<input name="Parent[childObjectType][serial_number]" type="textbox" value="" /> 

Tak dla twojej sytuacji to

<input name="Person[PhoneNumber][1]" type="TextBox" value="555-1212" /> 
<input name="Person[PhoneNumber][2]" type="TextBox" value="555-555-1212" /> 

i można zwiększyć numer seryjny i replikować element w javascript, aby uzyskać wielokrotne i użyć FormCollection w swoim działaniu, które dadzą Ci drogę do zdobądź te elementy.

Domyślnym elementem zespołu mvc jest użycie obiektu ModelBinder i składnia kropki dla tej operacji. Jednak powoduje to, że jQuery i inne struktury javascript są bajeczne.

0

Zaczynałem używać json i jQuery do umieszczania złożonych typów w działaniu kontrolera za pomocą JSON.NET i JsonFilter po stronie serwera, który automatycznie bierze twój obiekt json i serializuje go do równoważnego typu C#. Stwierdziłem, że jest to bardzo czyste rozwiązanie i łatwiejsze do przetestowania. Możesz sprawdzić ten post z przykładowym kodem do pobrania, aby rozpocząć, jak to zrobić. To całkiem proste.

http://blogger.forgottenskies.com/?p=252

3

To jest obsługiwany przez ramy za pomocą specjalnego formularza „układ”. Phil Haack ma artykuł na ten temat, check this out

Edytuj Scott Hanselman (http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx) właśnie opublikował aktualizację na ten temat. Co więcej w RC1 wydaje się (wpadł wczoraj w tą noc), że indeksy muszą być oparte na 0 i stale rosnące (przynajmniej jeśli "wiążą" się z IList)

Edycja Link 2 nie działa

0

We wspomnianym poście Hanselmana pisze, że nie potrzebujesz indeksów, po prostu masz taką samą nazwę dla pól wejściowych i masz parametr tablicy w akcji i to działa.

Powiązane problemy