Stan widoku jest przechowywany w ukrytej plakietce <input />
w formularzu. Kiedy użytkownik inicjuje odświeżenie (na przykład przez kliknięcie przycisku), dane są zwracane na serwer jako część danych formularza.
Jeśli przechowujesz duże ilości danych w ViewState, poniesiesz karę zarówno wtedy, gdy użytkownik spróbuje pobrać stronę (ponieważ wszystkie te dane będą częścią HTML), jak i gdy użytkownik spróbuje przesłać formularz (ponieważ wszystkie te dane muszą zostać przesłane z powrotem na serwer).
Ponadto łatwo można zgasić wskaźnik ViewState. Zachowuje się tylko wtedy, gdy użytkownik przesyła formularz. Jeśli użytkownik kliknie hiperłącze na innej stronie, formularz nigdy nie zostanie przesłany, a wszystkie dane zawarte w obiekcie ViewState zostaną utracone. Jest to prawdą, nawet jeśli znacznik zakotwiczenia wskazuje na stronę, na której aktualnie się znajduje.
Widzę z Twojego previous question, że próbujesz znaleźć dobre miejsce na umieszczenie swoich DataTables. ViewState nie jest najgorszym miejscem, o ile dane są stosunkowo małe. Base64 jest lepszy niż XML pod względem wykorzystania pamięci, ale nadal jest daleka od wydajności. Jeśli dane są dość statyczne, możesz rozważyć ich zapisanie w numerze ApplicationState. Jeśli edytujesz DataTable za pomocą GridView, to GridView faktycznie przechowuje już DataTable dla ciebie, do którego możesz uzyskać dostęp poprzez właściwość DataSource (po prostu wyślij ją z powrotem do DataTable).
Warto również zauważyć, że podczas gdy dane ViewState jest zakodowany w base64 (czyli przeciętny użytkownik nie będzie w stanie go zrozumieć), może być łatwo edytowane przez określony użytkownik. Pozornie nieszkodliwe dane można edytować, aby stać się szkodliwym dla Twojej witryny. To jest klasyczna droga do hakowania strony, więc musisz być bardzo ostrożny, jakie dane dokładnie przechowujesz. Na przykład, jeśli przechowujesz identyfikator użytkownika w ViewState, użytkownik może edytować identyfikator i włamać się na konto innego użytkownika. (Uwaga: jest to tylko problem jeśli EnableViewStateMac został ustawiony na False
.)
Downwotarzy - jeśli nie zostawisz komentarzy, PO nigdy nie nauczy się zadawać lepszych pytań. Osobiście nie widzę problemu z tym pytaniem. Uważam, że jest to przydatne dla społeczności, więc dodaję +1, aby zrównoważyć różne rzeczy. – JDB
@ Cyborgx37 Świat jest lepszym miejscem do życia z powodu ludzi takich jak Ty. Jestem całkiem nowy w tej technologii i staram się uczyć i usuwać moje pomieszanie. Właśnie dlatego zadaję takie pytania. Ale niektórzy Downwotnicy myślą, że to, co im znane, jest znane wszystkim i nikt nie powinien zadawać tego pytania. Przypomina mi chińskie przysłowie: "Ten, który zadaje pytanie, jest głupcem przez pięć minut, ten, kto nie zadaje pytania, pozostaje głupcem na zawsze". Lolz –
Dzięki, ale jest tak naprawdę standard, według którego można oceniać dobre/złe pytania - co oznacza, że nie wszystkie pytania dotyczące StackOverflow są mile widziane (zobacz http://stackoverflow.com/questions/how-to-ask). Po prostu nie widzę problemu z twoją. – JDB