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?

questionAnswers(4)

yourAnswerToTheQuestion