/ / Publikuj wartości nieedytowalne - c #, asp.net-mvc, asp.net-mvc-3

Opublikuj nieedytowalne wartości - c #, asp.net-mvc, asp.net-mvc-3

Mam widok i model (powiedzmy samochód). Jedno pole można edytować w formularzu (inne informacje są tylko wyświetlane). Po opublikowaniu formularza widoku potrzebuję wszystkich informacji, a nie tylko właściwości do edycji. Ale wszystkie pozostałe właściwości są zerowe.

Kiedyś tworzyłem ukryte pola, aby opublikować dane, ale kiedy masz więcej ukrytych pól niż nie ukrytych, tworzy to naprawdę brudny kod.

Czy istnieje sposób na opublikowanie wszystkich właściwości modelu bez użycia ukrytych pól?

Odpowiedzi:

5 dla odpowiedzi № 1

Powinieneś używać ViewModel tylko z polami edytowalnymi. W widoku po prostu umieść identyfikator modelu w bazie danych jako ukryte pole.

W swoim kontrolerze pobierz model z bazy danych. Następnie sprawdź, czy rzeczywiście możesz zmodyfikować ten element (ktoś może zmienić identyfikator w ukrytym polu, używając na przykład Firebug).

Następnie po prostu zaktualizuj model bazy danych o pola w ViewModel ... i ponownie zapisz model w bazie danych.

Jeśli użyjesz modelu CAR w widoku, ktośmoże zmienić więcej pól niż dozwolone ... jeśli użyjesz CarViewModel, jest to niemożliwe, ponieważ spoiwo modelu po prostu wiąże właściwości viewmodel.


2 dla odpowiedzi nr 2

Dane publikowane w postaci html stanowią treść danych wejściowych. Nie sądzę, że istnieje problem z ukrytymi polami, jeśli potrzebujesz tych danych w poście, po to są ukryte pola.

Biorąc to pod uwagę, jeśli naprawdę chcesz zmniejszyć ilość ukrytych pól, możesz „serializować” wszystkie te informacje w jednym polu, a następnie „deserializować” je w poście. Lub w niestandardowym modelu Binder.

Ale jeśli chcesz magii ModelBinder, która jest wyjęta z pudełka w Asp.Net MVC, musisz użyć pól formularza.


-1 dla odpowiedzi nr 3

Jeśli jesteś skłonny do umieszczania informacji w ukrytych polach, inną opcją byłoby włączenie ich do kwerendy.