图像上传后显示缩略图

时间:2012-02-22 18:28:31

标签: c# asp.net file-upload repeater thumbnails

我正在图片库上工作,用户可以在其中上传图片。上传的图像将转换为缩略图并放入特定的缩略图文件夹中,原始图像将放入文件夹中以显示完整尺寸的图像。

在代码后面的Page_Load方法中,我从文件夹中获取缩略图并将它们绑定到我正在使用的Repeater,这意味着在加载页面时会显示该文件夹中的所有图像。

当用户选择上传图像时,将调用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 个答案:

答案 0 :(得分:1)

与页面生命周期有关。在上传发生之前,Page_load正在触发。

尝试将填充缩略图的代码放在Page_PreRender而不是Page_Load。

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

这样,在上传按钮点击之后,它就会被触发。