2009-04-02 17 views
23

Czy ktoś zna przykłady lub samouczki widoku MVC, który pokazuje dane o rodzicach/dzieciach w jednym formularzu, i pozwala na edycję wszystkich rekordów podrzędnych?Przykład ASP.NET MVC edytowania wielu rekordów podrzędnych

Załóżmy na przykład, że mam tabelę osób i inną zawierającą pojazdy, które posiadają. Jedną z form, chcę pokazać każdy pojazd dla danej osoby i dokonać edycji elementów danych (np. Numeru tablicy rejestracyjnej, koloru samochodu itp.) Na wypadek błędów. Nie chcę przeskoczyć do osobnego formularza edycji dla każdego pojazdu.

Moje dotychczasowe próby doprowadziły mnie do punktu, w którym mogę wyświetlać dane, ale nie mogę go wysłać do kontrolera. Próbowałem zawęzić problem tak dalece, jak mogłem, here, ale nadal go nie dostaję i myślę, że szerszy przykład może być w porządku. Jakieś pomysły?

Odpowiedz

27

Możesz spróbować czegoś takiego.

Załóżmy, że masz ten obiekt:

public class Vehicle 
{ 
    public int VehicleID { get; set; } 
    public string LicencePlate { get; set; } 
    public string Color { get; set; } 
} 

A to twoje działanie kontroler, który będziesz używać, aby edytować dane pojazdu (gdzie można dodawać formularz):

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult EditVehicles(int Owner, Vehicle[] vehicles) 
{ 
    //manipulate the data, then return back to the list 
    return RedirectToAction("YourAction"); 
} 

Następnie powinieneś ustawić swój formularz w ten sposób:

<!--have a form for each person, listing their vehicles--> 
<form action="/EditVehicles" method="post"> 
    <input type="hidden" name="Owner" value="25" /> 
    <input type="hidden" name="Vehicles[0].VehicleID" value="10" /> 
    <input type="text" name="Vehicles[0].LicencePlate" value="111-111" /> 
    <input type="text" name="Vehicles[0].Color" value="Red" /> 
    <input type="hidden" name="Vehicles[1].VehicleID" value="20" /> 
    <input type="text" name="Vehicles[1].LicencePlate" value="222-222" /> 
    <input type="text" name="Vehicles[1].Color" value="Blue" /> 
    <input type="submit" value="Edit" /> 
</form> 

Pomoże to w poprawnym powiązaniu obiektu DefaultModelBinder dane formularza do modelu w kontrolerze. Tak więc Response.Write(vehicles[1].Color); na twoim kontrolerze wyświetli "niebieski".

To bardzo prosty przykład, ale jestem pewien, że wpadłeś na ten pomysł. Aby uzyskać więcej przykładów na temat wiążących formularzy do tablic, list, kolekcji, słowników, spójrz na here.

+0

DZIĘKI! Dokładnie tego szukałem, a artykuł Hanselmana był doskonały. – gfrizzle

+0

Nie ma za co. :) –

+0

Działa to dobrze podczas wykonywania POST do mojego/Utwórz adres URL, ale nie przywraca istniejących danych podczas wykonywania GET na/Edit URL. Zarówno moje strony Utwórz i Edytuj używają tego samego widoku częściowego, a tym samym używają tego samego modelu o silnym typie. Jakieś pomysły, dlaczego? – JMS

0

Myślę, że najlepiej można się do tego obejść za pomocą postów AJAX, Za każdym razem, gdy użytkownik kliknie przycisk przesyłania, możesz podłączyć się do tego wydarzenia, utworzyć tablicę JSON z rzeczy, które chcesz utrwalić i przesłać ją przez .

Innym sposobem jest oczywiście uzyskanie wszystkich informacji z obiektu "FormCollection" w akcji POST. Trzeba tylko przetestować wszystkie klucze, przeanalizować dane, a następnie je przetworzyć.

Powiązane problemy