показ миниатюры после загрузки изображения - PullRequest
1 голос
/ 22 февраля 2012

Я работаю над галереей изображений, куда пользователь может загружать изображения.Загруженное изображение преобразуется в миниатюру и помещается в определенную папку для миниатюр, а исходное изображение помещается в папку для полноразмерных изображений.

В методе Page_Load в коде позади я получаю эскизы изпапку и свяжите их с Repeater, который я использую, что означает, что все изображения в этой папке отображаются при загрузке страницы.

Когда пользователь выбирает загрузить изображение, вызывается функция UploadButton_Click,файл обрабатывается, а затем отображается в полном размере.Все работает хорошо, примите, что миниатюра загруженного изображения не отображается сразу после загрузки.Чтобы показать это, вы должны перезагрузить страницу, чтобы Page_Load загрузился снова.

Конечно, восточный способ решения этой проблемы - поместить код для извлечения миниатюр и привязки элемента управления Repeater даже в функции UploadButton_Click., но это СУХОЙ, что мне не нравится.

Есть ли лучший, более элегантный способ решения этой проблемы?

код позади:

 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 Ответ

1 голос
/ 22 февраля 2012

это связано с жизненным циклом страницы.Page_load срабатывает до того, как происходит загрузка.

Попробуйте поместить код, заполняющий миниатюры, в Page_PreRender, а не в Page_Load.

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

Таким образом, он будет запущен после нажатия кнопки загрузкипроизошло и не раньше.

...