2012-02-22 70 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