2008-08-22 30 views
5

Tôi có một số điều khiển "ASP: TextBox" trên biểu mẫu (khoảng 20).
Khi biểu mẫu tải, các hộp văn bản được điền từ cơ sở dữ liệu.
Người dùng có thể thay đổi giá trị được điền, và khi họ gửi biểu mẫu, tôi lấy các giá trị được đăng lên máy chủ và lưu điều kiện chúng (được xác định bởi một số logic nghiệp vụ).
Tất cả trừ 1 trong các hộp văn bản hoạt động như dự định.Bài đăng biểu mẫu không chứa dữ liệu hộp văn bản [ASP.NET C#]

Hộp lẻ, sau khi đăng lại, không chứa giá trị được cập nhật mà người dùng đã nhập vào hộp.
Khi gỡ lỗi ứng dụng, rõ ràng là myTextBox.Text phản ánh giá trị cũ, được điền trước, không phải giá trị mới do người dùng cung cấp.
Mỗi hộp khác hiển thị đúng các giá trị do người dùng cung cấp tương ứng.

Tôi đã tìm được giải pháp thay thế.
Giải pháp của tôi về cơ bản là trích xuất giá trị của hộp văn bản ra khỏi đối tượng Request.Form: Request.Form[myTextBox.UniqueID], chứa giá trị do người dùng cung cấp.

Điều gì có thể xảy ra, ở đây?
Như tôi đã đề cập, các hộp văn bản khác nhận giá trị do người dùng cung cấp, và hộp văn bản có vấn đề cụ thể này không có bất kỳ logic nào liên kết với nó - nó chỉ lấy giá trị và lưu nó.
Sự khác biệt chính giữa hộp văn bản này và các hộp khác là hộp đa dòng (để nhập ghi chú), mà tôi tin là được hiển thị dưới dạng thẻ HTML "textarea" thay vì thẻ "đầu vào" trong ASP.NET .

Trả lời

8

Ban đầu bạn chỉ tải dữ liệu khi! Page.IsPostBack? Ngoài ra, trạng thái xem có được bật cho hộp văn bản không?

1

Hãy nhớ thứ tự của vòng đời trang và nơi bạn đang đặt dữ liệu vào biểu mẫu của mình.

  • PreInit
  • Init
  • tải
  • bạn tổ chức sự kiện kiểm soát Handler

Nếu bạn đang đọc giá trị trong xử lý sự kiện kiểm soát, tuy nhiên databinding trong Init hoặc Load, bạn sẽ có giá trị cũ.

Bí quyết là luôn luôn databind trong sự kiện chính xác, hoặc kiểm tra postback và không databind sau đó.

2

Tôi sẽ đứng thứ hai Jonathan's response Tôi sẽ kiểm tra cài đặt dữ liệu của bạn.

Nếu bạn không cần ViewState cho hộp văn bản (tức là không có postback xảy ra cho đến khi gửi biểu mẫu) thì bạn nên vô hiệu hóa nó.

Có vẻ như bạn không gặp sự cố khi lưu dữ liệu (vì bạn đã nói rằng bạn đã có được quyền kiểm soát để đọc lại dữ liệu chính xác). Vì vậy, tôi sẽ nói vấn đề tải trong mã databinding của bạn.

6

điều này xảy ra với tôi mọi lúc.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     // populate text boxes from database 
    } 
} 
1

Bạn đang bước đầu tải dữ liệu chỉ khi! Page.IsPostBack? Ngoài ra, trạng thái xem có được bật cho hộp văn bản không?

Tôi gần như đã quên kiểm tra ViewState, nhưng cuối cùng nhớ phải xác minh rằng nó không bị vô hiệu hóa trước khi đăng bài của tôi ở đây trên SO. Tôi thậm chí đặt EnableViewState = "true" để đảm bảo.

Tôi đã tìm thấy giải pháp và trùng khớp với hầu hết các câu trả lời tại đây. Biểu mẫu đã thực sự tải dữ liệu của nó nhiều hơn một lần (đó là hành vi cố ý). Tôi đã triển khai một số mã đặc biệt cho trường này và tất cả đều tốt.

Cảm ơn câu trả lời của bạn!

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