Piszę paczkę ogólnych kontrolek ASP.NET, a jedną rzeczą, której nie mogę otoczyć moim umysłem, jest przechowywanie wartości w stanie wyświetlania i kiedy należy założyć, że nie jest to możliwe.Jak zdecydować, co przechowywać w stanie oglądania?
Z jednej strony ma to sens, aby zapisać cały stan kontroli w stan wyświetlania, w tym właściwości, takie jak:
- wartości pola tekstowego wprowadzonych przez użytkownika (lub jakichkolwiek danych formularz)
- opcje konfiguracyjne jak wysokość lub rozmiar strony
- Nawet w jaki sposób formant został skompilowany - na przykład przechowywanie wszystkich danych, z których zbudowany jest widok siatki, lub samej siatki.
Ignorowanie wydajności, tym więcej można przesunąć w stan oglądania, tym lepiej, ponieważ oznacza to, że kontrola będzie zachowywać się dokładnie tak samo w postbackach i nigdy "przypadkowo" nie przywróci wartości lub "zapomni", że została wyłączona. Ale stan wyświetlania nie jest bezpłatny. Przechowywanie wszystkiego oznacza, że formant będzie teraz wyświetlał zarówno HTML, jak i wszystkie jego wewnętrzne właściwości, aby utworzyć ten HTML, który prawie zawsze będzie ponad dwukrotnie większy od danych wyjściowych.
Moje pytanie nie dotyczy wydajności, ale strategii. Na jakich kryteriach decyduję się umieścić nieruchomość w stanie widoku? Myślałam coś wzdłuż tych linii:
Jeśli użytkownik nie może zmienić właściwość, wtedy serwer będzie zawsze ustawić go jawnie, więc jest OK, aby pozostawić go na stan wyświetlania. Nawet dla czegoś takiego jak
color=red
, użytkownik nie ustawia tej właściwości bezpośrednio; klikną przycisk w innym miejscu, który pośrednio ustawia tę właściwość. Ten przycisk lub jego właściciel powinien zachować stan, a nie kontrolę, która powoduje, że kolor jest czerwony.
Ta logika wskazuje, że tylko właściwości, które powinien przejść do stanu wyświetlania byłoby:
- Elementy formy jak
<input>
(izRequest.Form[c.UniqueID]
można tego uniknąć wciąż) - właściwości, które użytkownik może kontrolować interaktywnie bezpośrednio na sterowanie.
Czy ta logika ma sens? Wydaje się być słaby i chciałbym usłyszeć więcej od ekspertów.
Również: http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx to fajna lektura – Patrick