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

Смежные вопросы