2012-02-22 86 views
1

我正在處理圖片庫,用戶可以上傳圖片。上傳的圖像被轉換爲​​縮略圖並放入縮略圖的特定文件夾中,並將原始圖像放入全尺寸圖像的文件夾中。顯示圖片上傳後的縮略圖

在Page_Load方法在後面的代碼我得到從文件夾縮略圖,並將其綁定到我使用的中繼器,這意味着被裝載的頁面時該文件夾中的所有圖像被顯示。

當用戶選擇上傳圖片時,UploadButton_Click函數被調用,文件將被處理,然後以全尺寸顯示。一切工作正常接受上傳的圖像縮略圖上傳後不直接顯示。要顯示它,您必須重新加載頁面,以便再次加載Page_Load。

當然,解決這個問題的一個東方的方法是放置代碼來獲取縮略圖並綁定Repeater控件,即使在UploadButton_Click函數中,但這是我不喜歡的DRY。

有沒有更好,更優雅的解決方法?

後面的代碼:

protected void Page_Load(object sender, EventArgs e) { 
    var directory = new DirectoryInfo(Gallery.PhysicalApplicationPath + "/Images"); 
    var theFiles = directory.GetFiles(); 

    ImageRepeater.DataSource = theFiles; 
    ImageRepeater.DataBind(); 

    var dataName = Request.QueryString["name"]; 

    if (dataName != null) { 
     fullSizeImage.ImageUrl = "Images/" + dataName; 
    } 
} 

protected void UploadButton_Click1(object sender, EventArgs e) { 
    if (Page.IsValid) { 
     if (ImageUpload.HasFile) { 
      var content = ImageUpload.FileContent; 
      var name = ImageUpload.FileName; 
      var image = Gallery.SaveImage(content, name); 

      fullSizeImage.ImageUrl = "Images/" + image; 
     } 
    } 
} 

回答

1

它與頁面生命週期做。上傳發生之前,Page_load正在觸發。

嘗試將填充縮略圖的代碼放入Page_PreRender而不是Page_Load中。

 protected void Page_PreRender(object sender, EventArgs e) { 
     //CODE HERE} 

這樣,上傳按鈕點擊發生後,它會被解僱,而不是之前。

+0

太棒了,就像一個魅力!謝謝! – holyredbeard 2012-02-22 18:46:30