asyncfileupload完成上载后的页面更新

时间:2013-03-05 20:41:31

标签: ajax updatepanel postback asyncfileupload

我经常看到这个问题,并且我已经做了大量的实验,试图让它发挥作用。然而,到目前为止,其他人的例子和答案都让我失望了。我很困惑。情况如下:

  • AsyncFileUpload不在UpdatePanel中
  • 要更新的图像和标签位于UpdatePanel
  • 上传完成后应进行更新

上传确实按预期保存了文件。我的问题是在发生这种情况后让页面更新。正在上传的文件是图片,我希望该图片能够更新。如果您重复使用文件名,我知道在客户端上没有更新图像的一些问题,但我也将它打印到标签上以确保。我确定我定位的UpdatePanel没有更新。

我尝试了以下方法:

  • 使用服务器端方法手动更新条件UpdatePanel - 由于文件上载在框架中完成,因此失败。嗅探返回的HTML显示正确的HTML实际上是在帖子后发回的,但当然是错误的框架。
  • 使用客户端方法触发javascript回发到我的UpdatePanel。这不起作用,我不知道为什么。
  • 使用客户端方法触发javascript按钮,在UpdatePanel内单击。再一次,没有任何反应,我不知道为什么。
  • 设置UpdatePanel的触发器,使其直接指向AsyncFileUpload。没有快乐,但我知道这将是一个长镜头,牢记隐藏的框架。
  • 将AsyncFileUpload移动到UpdatePanel并尝试上述各种操作。当我这样做时,我丢失了发布到服务器的文件的所有句柄,我无法保存文件。

通常当我遇到这种错误时,所有教程看起来都是错误的,事实证明我的错误是因为我没有在控件的某个地方设置ID而且它在某种程度上很重要。在这种情况下我甚至看不到。这是一些代码。

<fieldset class="pj_Pics">
    <ul>
        <li>
            <label>Picture 1</label>
            <asp:UpdatePanel ID="ajax_Pic1" runat="server" UpdateMode="Always">
                <ContentTemplate>
                    <asp:Image ID="img_Pic1" runat="server" />
                    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                    <asp:Button ID="Button1" runat="server" Text="Button" />
                </ContentTemplate>
            </asp:UpdatePanel>
            <div style="position:relative;">
                <div class="photoChooser">
                    <ajaxToolkit:AsyncFileUpload ID="fu_Pic1" runat="server" CssClass="pj_PicChoose" Width="84px" OnClientUploadComplete="picPost1" OnUploadedComplete="fu_PictureFile_UploadedComplete" ThrobberID="throb1" />
                    <span><asp:Literal runat="server" Text="click to change"></asp:Literal></span>
                    <asp:Image ID="throb1" runat="server" ImageUrl="~/images/throbber.gif" AlternateText="uploading image" />
                </div>
            </div>
        </li>
    </ul>
</fieldset>

protected void fu_PictureFile_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
    bla bla bla;
    // and update the image
        img.ImageUrl = "~/" + webfolder + imageFileName;
        thing.Text = img.ImageUrl;
}

function picPost1(sender, args) {
    document.getElementById('<%# Button1.ClientID %>').click();
}

任何帮助非常感谢。页面上显然有一个ScriptManager,我展示的代码就是我尝试过的最后一件事。如果您还需要查看其他内容,请与我们联系。

谢谢!

1 个答案:

答案 0 :(得分:0)

我今天碰巧遇到了同样的情况,这就是我解决它的方法。

根据这个LINK,自从异步FileUpload以来,没有发生Postback,甚至没有ViewState。

所以在OnUploadedComplete中我在代码隐藏中执行SaveAs()之前测试文件类型和大小,然后我在OnClientUploadComplete中测试它以显示消息并继续进行其余工作,如设置Images URL。希望这会有所帮助。