AjaxFileUpload控件不能与多视图一起使用,上传永远不会完成

时间:2013-11-06 05:36:52

标签: c# asp.net asp.net-ajax

我在MultiView的第二个视图中有一个AjaxFileUpload控件。默认情况下,会出现MultiView的第一个视图,单击一个按钮,我会到达具有AjaxFileUpload Control的第二个视图。此控件不上传任何文件,上传率为93%或99%或100%。

但是当我将第二个视图设置为默认视图时,AjaxFileUpload Control没有任何问题。

WebForm中的代码(aspx页面):

  <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0">
        <asp:View ID="View1" runat="server">
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        </asp:View>
        <asp:View ID="View2" runat="server">
            <asp:AjaxFileUpload ID="AjaxFileUpload1" runat="server" onunload="AjaxFileUpload1_Unload"
                onuploadcomplete="UploadComplete" ThrobberID="myThrobber" onload="AjaxFileUpload1_Load"
                oninit="AjaxFileUpload1_Init" />
            <asp:AnimationExtender ID="AjaxFileUpload1_AnimationExtender" runat="server" Enabled="True"
                TargetControlID="AjaxFileUpload1">
            </asp:AnimationExtender>
            <asp:Button ID="Button1" runat="server" Text="Button" />
        </asp:View>
    </asp:MultiView>

cs页面中的代码(aspx.cs):

protected void Page_Load(object sender, EventArgs e)
{

}

protected void UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
string path = Path.GetTempPath();

AjaxFileUpload1.SaveAs(Server.MapPath("files/")+ e.FileName);
}

protected void AjaxFileUpload1_Unload(object sender, EventArgs e)
{

}

protected void Button1_Click(object sender, EventArgs e)
{
MultiView1.ActiveViewIndex = 1;
}

我做错了什么,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

感谢您的提问。

这是一个已知问题,如果将AjaxFileUpload控件置于最初不可见的Panel控件上,则该控件不起作用。

可以在客户端选择文件,但如果用户单击“上传”按钮,则上传将不会完成,并且仍处于失败状态。

如果我们想要解决它,我们应该在同一页面上的一个不可见的HTML div标签中放置另一个AjaxFileUpload控件

将相同的客户端和服务器端上传完整事件处理程序附加到AjaxFileUpload控件。

请检查以下链接,有人提供了解决方案。

http://ajaxcontroltoolkit.codeplex.com/workitem/27307

希望这会有所帮助。感谢。

最诚挚的问候!

答案 1 :(得分:0)

您可以替换MultiView并使用multiple panel查看控件。并创建一个模拟

的方法
multiview.setactiveview();
Panel1.visible=true; 
Panel2.Visible=false;