2012-07-20 31 views
5

My QuestionKiểm soát tải lên tệp hoạt động trên nhấp chuột thứ hai nhưng không phải là lần đầu tiên thử lưu tệp đã đăng?

Tôi đã tự mình trả lời, tuy nhiên cùng một tập hợp chức năng lại có một vấn đề khác. Đối với một số lý do, postback đầu tiên của sự kiện lưu của tập tin được đăng lên đối tượng Ol 'không được đặt thành một thể hiện của một lỗi đối tượng, nhưng vào lần thứ hai tải lên một tệp và kích hoạt sự kiện lưu của tôi (chuyển thành byte [] một được lưu trữ dưới dạng BLOB của SQL Server), mọi thứ được thực hiện.

Same problem here

Có một gợi ý tốt của việc sử dụng điều khiển AJAX AsyncUpload tuy nhiên tôi một niềm tin vững chắc loại bỏ các nguyên nhân và không điều trị các vấn đề. Tôi sẽ tiếp tục đi theo con đường này để hiểu rõ hơn về asp.net, v.v.

Sẽ có một người trong số đó có thể giúp tôi xác định lý do tại sao tôi nhận được lỗi "phản đối đối tượng không được đặt thành lỗi obj" trong lần postback đầu tiên vào thứ hai nó hoạt động tốt. Trang nội dung có trang chính bao bọc trang nội dung trong bảng điều khiển cập nhật. Không phải quyết định của tôi để làm điều này. Ngoài ra còn có bảng cập nhật với trình kích hoạt postback nhắm mục tiêu sự kiện lưu của tôi.

Suy nghĩ của bạn là gì?

Trả lời

12

Vấn đề (như được thấy ở đây http://forums.asp.net/t/1060363.aspx) có vẻ là khi bạn sử dụng thuộc tính hiển thị trên bảng điều khiển xung quanh (vì có vẻ như bạn đến từ câu hỏi được liên kết).

Cách giải quyết đề nghị là sử dụng tầm nhìn CSS thay vì sử dụng này để làm cho nó vô hình -

<asp:Panel ID="pnlUpload" runat="server" class="workerDetailsPanelLeft" style="display:none"> 

Lời giải thích cho điều này từ các chủ đề được

Nếu container của bạn được thiết lập để vô hình, điều khiển tải lên không thực sự được hiển thị dưới dạng HTML, khiến mã hóa của biểu mẫu không được đặt thành enctype = "multipart/form-data", khiến việc kiểm soát tải lên tệp không đăng tệp đã chọn quay lại máy chủ. Cách giải quyết là một trong hai để đảm bảo sự kiểm soát FileUpload được render sang HTML (bằng cách thiết lập phong cách của mình cho display: none thay cho Visible = false), hoặc bằng cách tự thiết lập các enctype

Vì vậy, cách giải quyết khác sẽ được thay đổi thẻ biểu mẫu của bạn cho số này

<form id="form1" enctype="multipart/form-data" runat="server"> 

Tôi nghĩ một trong hai cách đó sẽ giải quyết được sự cố của bạn.

+1

Tuyệt vời, tôi hiểu ngay bây giờ. Cảm ơn bạn rất nhiều vì đã chỉ ra điều đó. Tôi rõ ràng đã bỏ qua nó. +1 và trả lời :-) – dotnetnewb

4

Bạn có thể thực hiện tương tự thông qua mã trên sự kiện Page_Load .. Nhập mã này và nó sẽ giải quyết vấn đề.

Page.Form.Attributes.Add("enctype", "multipart/form-data"); 
Các vấn đề liên quan