Jakie jest poprawne zachowanie UpdateModel w ASP.NET MVC?
Jestem zainteresowany, aby wiedzieć, co czujecie, powinniście uważać za „prawidłowe zachowanie” w kategoriachUpdateModel
metoda w ASP.NET MVC.
Powód, dla którego pytam tutaj, może być taki, że jeśli ta funkcjonalność jest „z założenia”, ktoś może wyjaśnić, dlaczego tak jest i być może sposób nazwać ją inaczej, aby osiągnąć pożądaną funkcjonalność, którą wyobrażałbym sobie w ten sposób. % ludzi chciałoby, żeby to zadziałało?
W gruncie rzeczy mój powód leży w zachowaniu procesu wiążącego wewnątrzUpdateModel
.
Przypuśćmy, że chcesz zaktualizować formularz za pomocą prostegoSave
metoda działania, dla której pola danych w formularzu odzwierciedlają model w bazie danych, początkowo w celu zapisania żądania, możemy uzyskać istniejący model z bazy danych, a następnie zaktualizować odpowiednie pola, które zostały zmienione, wysłane za pośrednictwemFormCollection
a następnie zaktualizowane przezUpdateModel
do naszego istniejącego modelu. To działa, jednak wydaje się, że dowolna z istniejących właściwości tego obiektu wypełnionego DB jest „resetowana”; mam na myśli to, że są ustawione na wartości null lub inicjalizacyjne, tak jak gdyby był to zupełnie nowy obiekt, z wyjątkiem oczywiście tych, które pasują do tych wFormCollection
.
Jest to problem, ponieważ wszelkie istniejące właściwości, które istnieją na obiekcie, ale niekoniecznie istnieją w formularzu, takie jak dowolne kolekcje lub obiekty podrzędne, daty lub pola nieprzeznaczone do interfejsu użytkownika, są puste, pozostawiając na wpół wypełnione, więcej lub mniej nieużyteczny obiekt, którego nie można zapisać w bazie danych ze względu na brakujące dane, w tym prawdopodobnie stos identyfikatorów teraz ustawiony na 0.
Wierzę, że nie jest to pożądane zachowanie iUpdateModel
powinien aktualizować właściwości tylko wtedy, gdy znajdzie dopasowanie właściwościFormCollection
. Oznaczałoby to, że wszystkie twoje istniejące właściwości byłyby nietknięte, ale twoje aktualizacje byłyby ustawione. Jednak z tego, co do tej pory wywnioskowano, oczywiście nie jest tak - wygląda na to, że tworzy instancję azupełnie nowa kopia obiektu aktualizuje właściwości z formularza, a następnie zwraca nowy obiekt.
Wreszcie, aby spojrzeć na to, jak duże jest to obciążenie, jedynym sposobem na zapisanie w połowie złożonej formy i zachowanie wszystkich istniejących danych obiektów jest ręczne zawarcie związkukażdy właściwość z odpowiednią właściwością formularza, aby absolutnie zagwarantować, że aktualizowane są tylko właściwości istniejące w formularzu.
Zgaduję,
Ci, którzy zgadzają się z tym, są z założenia, czy moje podejście do formy jest najlepszym sposobem na małżeństwo?Lub, jak sobie z tym poradziłeś?Prosimy o podzielenie się swoimi przemyśleniami na ten temat, dzięki.
Oto kolejny przykład kogoś, kto cierpi na ten problem:
Wywołanie UpdateModel z kolekcją złożonych typów danych resetuje wszystkie wartości niezwiązane?