ViewState, Postback, Lifecycle là gì?
Đi vòng vòng ASP.NET thấy có mấy từ này, rồi lại đi vòng vòng tìm xem nó nghĩa gì, post lên đây anh em chú pác nào thấy sai chỉ giùm em.
Trường hợp không cần dùng ViewState: Mặc định các control đều dùng ViewState. Nếu như trang của bạn chỉ là trang output, hoặc mỗi request đều cần nạp lại dữ liệu thì bạn không cần dùng đến ViewState.
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTM1ODM3Nj......." />
Trường hidden sẽ chứa các giá trị viewstate cho tất cả các controls trên trang. Đây là một phần quan trọng của viewstate mà bạn cần nắm vững.
ViewState theo mặc định là sẽ được gửi tới client browser sau đó sẽ trở lại server trên form của một hidden input control trên trang của bạn, Việc lưu trữ một lượng lớn dữ liệu trong viewsate có thể làm tăng kích cỡ trang web của bạn, và có thể có ảnh hưởng đến việc thực thi nó nữa.
Example:
Điều này không có nghĩa là bạn nên tránh sử dụng viewstate mà để bạn có thể kiểm soát dữ liệu được lưu và sự ảnh hưởng của nó tới toàn trang.
ViewState có ưu điểm và cũng có nhược điểm. Nhưng bạn hoàn toàn có thể kiểm soát được nó.
Một cách đơn giản để lưu trũ dữ liệu nhỏ vào Viewstate là sử dụng các thuộc tính thay cho biến thành viên. Thuộc tính này có thể sử dụng viewstate để lưu giá trị hơn là việc bạn sử dụng biến thành viên sẽ bị mất giá trị sau một lần postback. Ví dụ lưu trữ một giá trị Integer vào ViewState có thể được làm như sau:
Public Property SomeInteger() As Integer
Get
Dim o As Object = ViewState("SomeInteger")
If Not o Is Nothing Then Return DirectCast(o, Integer)
Return 0 'a default
End Get
Set(ByVal value As Integer)
ViewState("SomeInteger") = value
End Set
End Property
C#
public int SomeInteger {
get {
object o = ViewState["SomeInteger"];
if (!o == null) return (int)o;
return 0;
//a default
}
set { ViewState["SomeInteger"] = value; }
}
* Trang của bạn không postback: nếu trang không postback lại dữ liệu, hoặc chỉ là trang output, thì không nên dùng ViewState.
* Bạn không handler các sự kiện của control: nếu các control không handler sự kiện, hoặc không bound data thì bạn cũng không cần dùng ViewState.
* Bạn khởi tạo lại dữ liệu mỗi khi refresh: nếu bạn bỏ qua dữ liệu cũ, thì cũng không cần dùng ViewState.
Disable ViewState: có một vài cách để bỏ ViewState
* Ở mức control: thiết lập thuộc tính EnableViewState bằng false.
Ví dụ:
<asp:Label ID="lblRequestCount" runat="server" EnableViewState="false"></asp:Label>
Khi ViewState được diasbled cho một control, nó sẽ tự động disabled cho các controls khác là con của control này.
* Ở mức trang: thiết lập thuộc tính EnableViewState bằng chỉ dẫn @Page, ví dụ <%@ Page EnableViewState="false" %>
* Ở mức ứng dụng?
* Ở mức toàn bộ các ứng dụng?



.jpg)
