我正在图片库上工作,用户可以在其中上传图片。上传的图像将转换为缩略图并放入特定的缩略图文件夹中,原始图像将放入文件夹中以显示完整尺寸的图像。
在代码后面的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;
}
}
}
答案 0 :(得分:1)
与页面生命周期有关。在上传发生之前,Page_load正在触发。
尝试将填充缩略图的代码放在Page_PreRender而不是Page_Load。
protected void Page_PreRender(object sender, EventArgs e) {
//CODE HERE}
这样,在上传按钮点击之后,它就会被触发。