简体   繁体   English

如何在AsyncFileUploader的OnUploadedComplete事件上更新UpdatePanel?

[英]How do I update UpdatePanel on OnUploadedComplete event of AsyncFileUploader?

I need to upload an avatar to server in 3 steps using Ajax: 我需要使用Ajax通过3个步骤将头像上传到服务器:

  1. Choose file to upload. 选择要上传的文件。
  2. Choose crop zone using jquery.Jcrop.js. 使用jquery.Jcrop.js选择裁剪区域。
  3. Create avatar and save it to DB. 创建头像并将其保存到数据库。

I have created a user control to implement it. 我创建了一个用户控件来实现它。 So user clicks the upload button and there is a modalPopUpExtender shows dialog box where users have to choose the file to upload (using AjaxToolKit File async uploader), after the file is uploaded the second PopUp extender has to show the uploaded image in another dialog box to let the user choose the rectangle to crop. 因此,用户单击上传按钮,然后出现一个modalPopUpExtender显示对话框,用户必须选择要上传的文件(使用AjaxToolKit File async uploader),文件上传后,第二个PopUp扩展程序必须在另一个对话框中显示上传的图像让用户选择要裁剪的矩形。 And the last step (button click "Create") is to crop image and show it in the parent page. 最后一步(单击“创建”按钮)是裁剪图像并将其显示在父页面中。 I'm successful with first step. 我第一步成功。 But I can't make the uploaded image to be displayed in the second dialog box. 但是我无法使上载的图像显示在第二个对话框中。

So here is my complete ascx file and its code behind: 所以这是我完整的ascx文件及其后面的代码:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Avatar.ascx.cs" Inherits="KR.Trivital.Web.UI.Controls.Avatar" %>
<script type="text/javascript">
    window.onload = function () { $addHandler($get('ctl00_CntAvatarBox_ImgButtAvatarImage'), 'click', showOverlay); }

     function showOverlay() {
           var bid = $find('mpeBehaviorID');
           bid.show();
       }

       function uploadComplete(sender, args) {
           var bid = $find('mpeBehaviorID');
           bid.hide();
           var bid2 = $find('ModalPopupExtender1BehaviorID');
           bid2.show();

       }
</script> 

    <asp:UpdatePanel runat="server" ID="UpdPan">
            <ContentTemplate>



        <asp:Image runat="server" ID="ImgAvatarImage" Visible="false" />
        <asp:ImageButton  runat="server" ID="ImgButtAvatarImage" Visible="false" OnClientClick="return false;" />

        <asp:Panel ID="panPopupUpload" runat="server" CssClass="popUpDetails" Width="550" Style="display: none">
            <h2 class="popPanelH2"><asp:Literal runat="server" ID="ltrUploadHeader" Text="Загрузка аватара" /></h2>
            <div style="background-color: Gray; padding: 20px;">
                <asp:Button ID="btnShowPopupUpload" runat="server" Style="display: none" />
                <asp:Button ID="btnCancelPopupUpload" runat="server" Style="display: none" />
                <ajaxToolkit:ModalPopupExtender ID="mdlPopupUpload" runat="server" TargetControlID="btnShowPopupUpload"
                    PopupControlID="panPopupUpload" CancelControlID="btnCancelPopupUpload" BackgroundCssClass="modalBackground"
                    BehaviorID="mpeBehaviorID" />

                    <ajaxToolkit:AsyncFileUpload runat="server" ID="AsncUpload1" OnUploadedComplete="AsncUpload1_UploadedComplete" 
                    OnClientUploadComplete="uploadComplete" />


            </div>
        </asp:Panel>
        <asp:Panel ID="panPopupCropper" runat="server" CssClass="popUpDetails" Width="550" Style="display: none">
            <h2 class="popPanelH2"><asp:Literal runat="server" ID="Literal1" Text="Выбор обрезного формата" /></h2>
            <div style="background-color: Gray; padding: 20px;">
                <asp:Button ID="Button1" runat="server" Style="display: none" />
                <asp:Button ID="Button2" runat="server" Style="display: none" />
                <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="Button1"
                    PopupControlID="panPopupCropper" CancelControlID="Button2" BackgroundCssClass="modalBackground"
                    BehaviorID="ModalPopupExtender1BehaviorID" />

                    <img runat="server" id="Img1" alt="" />


            </div>
        </asp:Panel>

        </ContentTemplate>
        </asp:UpdatePanel>

codebehind: 代码背后:

using System;
using KR.Trivital.Web.Core;
using KR.Trivital.Business.Users;
using System.Web;
using System.Drawing.Drawing2D;
using System.IO;
using System.Web.UI.WebControls;
using System.Text;
using System.Web.UI;

namespace KR.Trivital.Web.UI.Controls
{
    public partial class Avatar : SharedBaseControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.Visible = Page.User.Identity.IsAuthenticated;

            var avatar = UserAvatarBO.Get(CurrentUserId);
            if (avatar != null)
            {
                ImgAvatarImage.ImageUrl = avatar.ImagePath;
                ImgAvatarImage.Visible = true;
            }
            else
            {
                ImgButtAvatarImage.Visible = true;
            }


        }

        protected void lnkButtUpload_Click(object sender, EventArgs e)
        { 
            // Показать панель загрузки
            mdlPopupUpload.Show();

        }

        private AvatarUploader InitializeAvatarUploader()
        {
            var uploader = new AvatarUploader();

            uploader.SmoothingMode = SmoothingMode.HighQuality;
            uploader.OffSetMode = PixelOffsetMode.HighQuality;
            uploader.ResizingInterpolationMode = InterpolationMode.HighQualityBicubic;
            uploader.ThumbMaxHeight = SiteConfig.UserAvatarsSettings.AvatarHeight;
            uploader.ThumbMaxWidth = SiteConfig.UserAvatarsSettings.AvatarWidth;
            uploader.IntermidiaMaxHeight = SiteConfig.UserAvatarsSettings.UploadHeight;
            uploader.IntermidiaMaxWidth = SiteConfig.UserAvatarsSettings.UploadWidth;
            uploader.JpgQuality = SiteConfig.UserAvatarsSettings.AvatarQuality;
            uploader.UploadFolder = SiteConfig.UserAvatarsSettings.UploadFolder + "/" + this.Page.User.Identity.Name;

            return uploader;
        }

        protected void AsncUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
        {
            var uploader = InitializeAvatarUploader();
            string returnPath = "";
            uploader.UploadImage(AsncUpload1.FileContent, AsncUpload1.FileName, ref returnPath);



            Img1.Src = "~/" + returnPath;
        }


    }
}

This is a "creative solution", but it does work. 这是一个“创造性的解决方案”,但确实有效。
It uses the AsyncFileUpload's OnClientUploadComplete you're already using and a Control on your page that will trigger an update on your UpdatePanel (eg a Button; can have display:false if you like). 它使用您已经在使用的AsyncFileUpload的OnClientUploadComplete和页面上的控件,该控件将触发UpdatePanel上的更新(例如Button;如果愿意,可以显示display:false)。

function uploadComplete(sender, args) {
    // Your code
    __doPostBack('<%= UpdatePanelUpdatingControl.UniqueID %>', '');
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM