2009-05-20 117 views
1

我在運行時創建了FileUpload控件。當我單擊LinkButton時,會生成一個新的FileUpload控件。維護用於FileUpload控件的ViewState

現在假設我從FileUpload控件中選擇了一個文件,然後單擊LinkButton。之前的FileUpload控制失敗了。不過,我堅持認爲我用這條線在運行時創建每個控件的ViewState的:

f1.enableviewstate = true; 

如何維護一個FileUpload控制所選擇的文件?

回答

0
  1. 想想看,如果你真的需要在運行時呢?
  2. 如果你真的需要在運行時;不要忘記將它添加到最近的容器的Controls屬性。這樣做可以確保它的狀態被序列化爲ViewState

希望這有助於...

1

你不能預先選擇的文件上傳輸入標籤的文件路徑(安全相關 - 用戶必須選擇文件),所以.NET是無法從viewstate填充值。

2

步驟

  1. 用戶選擇文件
  2. 用戶點擊LinkBut​​ton的(問題,增加了額外的文件上傳控件的回發)
  3. 服務器端應該得到上回發的文件,並存儲在某個地方(任何地方)
  4. 替換第一個<input type=file>類似標籤和複選標記圖標(告訴用戶該文件已被上傳(或者甚至是禁用的只讀文本框瀏覽按鈕來僞造文件上傳控制 - 但是你將無法顯示正確的文件路徑)
  5. 用戶呈現一個新的窗體,顯示已經上傳的文件中新的空文件上傳控制。

出於安全原因,您無法以任何形式或形式操縱<input type=file>

哈克方法
如果我明白你正確地你的鏈接按鈕,增加了額外的文件上傳控件到你的頁面。相反,我會在第一次創建足夠數量的上傳控件並顯示一個。其他人會被CSS隱藏。用戶單擊LinkBut​​ton後,它將只具有客戶端Javascript功能,可以顯示其他控件。另一個...和另一個...和另一個...直到達到最大值。

複雜的方法
你可以通過但使用更多的JavaScript使之以不同的方式,使之更加的Web 2.0十歲上下。但是,您應該通過

2

上傳這些文件,因爲其他一些人提到過,由於安全問題,無法保留FileUpload的視圖狀態。 你可以做的只是簡單地在FileUpload下面添加一個Label。當用戶點擊鏈接按鈕以生成新的FileUpload時,將會觸發回傳,您可以檢查頁面上的FileUpload控件是否具有某些值(即用戶已選擇要上載的文件),如果是,您可以直接開始上傳該文件並在標籤上顯示結果(路徑或文件名),只是用戶知道他已經添加了該文件。您還可以隱藏文件上傳並添加刪除鏈接,以再次刪除上傳的文件(與Gmail類似)。

希望這有助於。

樹裏

+0

我也在想這個方法....我覺得現在應該使用這個。 – 2009-05-20 11:18:04

0

按照我也沒辦法堅持文件上傳的視圖狀態中asps.net。

ü可以存儲它的隱藏字段的值,會話等文件 - 可以不能夠分配該值再次文件上傳,因爲它是隻讀