2010-09-01 36 views
19

Càng sử dụng ASP.NET, càng có nhiều if (!IsPostBack) {} dường như vô nghĩa ...Thực hiện IsPostBack trong tải trang

dụ đầu tiên:

Ví dụ, tôi chỉ google một vấn đề, họ nói sử dụng điều này như một phần của giải pháp:

if (!Page.IsPostBack) 
{ 
    Page.LoadComplete += new EventHandler(Page_LoadComplete); 
} 

Chính xác như được mã hóa, LoadComplete sẽ chỉ kích hoạt lần tải đầu tiên. Sau khi nhấp vào nút hoặc bất kỳ thứ gì kích hoạt đăng lại, sự kiện LoadComplete sẽ bị bỏ trống, do đó bỏ qua trình xử lý sự kiện. Do đó, "sửa lỗi" của chúng chỉ hoạt động khi tải đầu tiên = vô giá trị. Tôi đã nhanh chóng nhận xét ra số if (!Page.IsPostBack) {} và bây giờ sự kiện luôn kích hoạt như mong muốn.

Thứ hai ví dụ:

Tôi đang cố gắng để treo các sự kiện để một nút tự động tạo ra (mà bằng cách này, tôi không thể có được để làm việc [GRR!]). Tôi thấy ví dụ cho thấy điều này:

myEditToggleButton = new Button(); 
myEditToggleButton.ID = "editToggleButton"; 
//^GOTTA HAVE THIS FOR EVENTS TO WORK! (supposedly, I haven't seen it work...) 
if (!IsPostBack) 
{ 
    myEditToggleButton.Click += new EventHandler(myEditToggleButton_Click); 
} 
Controls.Add(myEditToggleButton); 

Giống như ví dụ đầu tiên, sự hiểu biết của tôi là sự kiện này sẽ không được nối sau khi tải trang đầu tiên, do đó nút là "trơ" sau một cú nhấp chuột (vì khi nhấp vào gây ra một postback).

Câu hỏi:

Khi nào bạn nên sử dụng if (!IsPostBack) {}? Tôi đoán nó phải làm với các điều khiển được tạo ra chỉ đánh dấu.

+0

Thành thật mà nói, bất kỳ mã nào trong sự kiện tải không được bao bọc trong một Page.IsPostBack là một lá cờ đỏ cho tôi trong quá trình đánh giá mã. Nó thường chỉ ra một sự hiểu lầm về cách các biểu mẫu web hoạt động, đặc biệt là liên quan đến ràng buộc dữ liệu. –

Trả lời

15

Nói tóm lại, bạn sử dụng nó mọi lúc bạn cần phải thực hiện một cái gì đó chỉ khi nạp đầu tiên .

Cách sử dụng cổ điển là Page.IsPostBack là khởi tạo kiểm soát/ràng buộc dữ liệu.

if(!Page.IsPostBack) 
{ 
    //Control Initialization 
    //Databinding 
} 

Mọi thứ đang tồn tại trên ViewStateControlState không cần phải được tái tạo trên mỗi postback, do đó bạn kiểm tra các điều kiện này để tránh thực thi mã không cần thiết.

Cách sử dụng cổ điển khác là nhận và xử lý thông số Querystring. Bạn không cần phải làm điều đó trên postback.

+0

Vâng, Viewstate chắc chắn là lực lượng chính đằng sau việc sử dụng nó – Jared

4

Nó dành cho dữ liệu biểu mẫu xử lý.

Nếu bạn muốn xử lý dữ liệu đã đăng, bạn chỉ muốn làm như vậy nếu trang thực sự đăng dữ liệu, chứ không phải trên lần tải đầu tiên. Do đó, cờ IsPostBack.

6

Khi không cần lặp lại thao tác này ngoài lần đầu tiên.

sử dụng nó với các hoạt động tốn kém (chẳng hạn như nhận dữ liệu từ cơ sở dữ liệu hoặc PopIt ListItems) chỉ được thực hiện lần đầu tiên trang hoặc điều khiển được tải. Nếu trang được đăng lên máy chủ và sau đó được tải lại, không cần phải lặp lại thao tác. Bằng cách kiểm tra giá trị của IsPostBack, bạn có thể bỏ qua thao tác đắt tiền,

+1

Tuy nhiên, với bất kỳ điều khiển được thêm động nào, chúng sẽ bốc hơi. Vì vậy, ví dụ, nếu bạn tự động thêm một hộp thả xuống, các mục trong trình đơn thả xuống sẽ bị bốc hơi với hộp thả xuống. – Yerg

+0

@Yerg, sau đó bạn sẽ cần thêm các điều khiển đó trước if (! IsPostBack) – harpo

+0

@Yerg trang này sẽ giúp bạn hiểu IsPostBack liên quan đến điều khiển động. http://forums.asp.net/t/1186195.aspx –

3

Điều gì có thể xảy ra nếu bạn gây ra postback là bạn có thể thay đổi trạng thái điều khiển của mình. Ví dụ: khi sử dụng chế độ xem lưới, nếu bạn đăng lại trong chế độ chỉnh sửa, bạn sẽ không còn quyền truy cập vào các trường chỉnh sửa của mình nữa.

Thông thường bạn cần phải duy trì các thông tin từ disapearing trên một trang khi bạn nhấn máy chủ, đây là điểm của

if(!Page.IsPostBack) 
1

xử lý sự kiện của bạn nên được dây lên bất cứ khi nào sự kiện có thể bị sa thải (không phụ thuộc vào tình trạng PostBack)

Ngoài ra, khi thêm điều khiển tự động, hãy chắc chắn để quan sát asp page lifecycle

0

Ngoài ra, bạn phải sử dụng IsPostBack nếu bạn muốn khởi tạo điều khiển, nếu không chúng sẽ được hoàn nguyên về mặc định trên mọi tải. Điều này sẽ gây nhầm lẫn cho người dùng khi họ cố gắng sử dụng biểu mẫu giá trị đã nhập của họ sẽ được đặt lại về giá trị mặc định của bạn.

1
protected void Page_Load(object sender, EventArgs e)    
{ 
    if (!IsPostBack) { 
     SqlConnection conn = new SqlConnection("Data Source=-----; Database=-----; Integrated Security=True"); 
     SqlDataAdapter da = new SqlDataAdapter(); 
     conn.Open(); 
     da.SelectCommand = new SqlCommand("Select Command",conn); 
     conn.Close(); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 

     ddlSearch.DataSource = dt; 
     ddlSearch.DataTextField = "---"; 
     ddlSearch.DataValueField = "---"; 
     ddlSearch.DataBind(); 
    } 
} 
+0

Một số lời giải thích về mã này sẽ rất tuyệt –

0

Trước tiên, bạn cần phải hiểu là những gì postback, khi bạn bắt đầu dự án của bạn trong Visual Studio,
nếu bạn có một if statement đó kiểm tra xem isPostBacktrue hoặc false trong phương pháp Page_Load của bạn, vào thời điểm này, isPostBackfalse, có nghĩa là không phải là postback, sau đó là postback là gì,
bây giờ hãy nhấp vào một button (nếu bạn không có nút, vui lòng thêm một nút và phương pháp nhấp vào nút), tại thời điểm này, bạn gửi yêu cầu quay lại máy chủ, máy chủ sau đó phản hồi, quá trình này được cái gọi là postback, được kích hoạt bằng cách nhấn vào button,

một điều bạn thực sự cần phải chú ý, phương pháp Page_Load sẽ được thực hiện một lần nữa, không chỉ là phương pháp Button_click sẽ được thực hiện, vì vậy bây giờ, các isPostBacktrue , có nghĩa là nó là postback, có, nó thực sự là một postback, bởi vì bạn nhấp vào nút.

Các vấn đề liên quan