【问题标题】:Can't get AsyncFileUpload to work in update panel无法让 AsyncFileUpload 在更新面板中工作
【发布时间】:2011-03-24 18:42:10
【问题描述】:

我有一个带有更新面板、脚本管理器和异步文件上传控件的用户控件。

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> 
<asp:ScriptManager ID="ScriptManager2" runat="server" ></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <cc1:AsyncFileUpload ID="AsyncFileUpload2" runat="server" />
        <asp:LinkButton id="lbSubmitOrder" runat="server" title="Submit Order Request" class="btn_blue_dynamic_med"/>
    </ContentTemplate>      
</asp:UpdatePanel>

在我的代码后面:

 Dim path As String = Server.MapPath("~/temp/test.tmp")

 AsyncFileUpload2.SaveAs(path)

在我的 AsyncFileUpload2 对象中,文件名什么都不是。我似乎无法引用应该上传的文件。

-内特

更新
我已经添加了

Private Sub AsyncFileUpload1_UploadedComplete(ByVal sender As Object, ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs) Handles AsyncFileUpload1.UploadedComplete
    If e.state = AjaxControlToolkit.AsyncFileUploadState.Success Then
        '....'
    Else
        showErrorMessage(e)
    End If
End Sub

选择文件后,我无法在“if”语句处打断点。我想我的页面上有问题,ajax 是如何工作的?虽然不知道是什么。

已修复!
我通过一个带有可见=真/假 div 的单选按钮显示 ajax 上传框。答案告诉我控件必须在页面加载。我拿走了div,一切正常!我现在将通过 jquery 进行显示/隐藏(我一开始就应该这样做)。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    确保带有 asyncfileupload 控件的用户控件未异步加载,例如通过 Response.Redirect("pageWithUploadControl")。

    您是否处理过 FileUploadComplete 事件并检查 AsyncFileUploadState 是否为 Success?

       Private Sub AsyncFileUpload1_UploadedComplete(ByVal sender As Object, ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs) Handles AsyncFileUpload1.UploadedComplete
            If e.state = AjaxControlToolkit.AsyncFileUploadState.Success Then
                '....'
            Else
                showErrorMessage(e)
            End If
        End Sub
    
        Private Sub showErrorMessage(ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs)
            Dim message As String = String.Empty
            Select Case e.statusMessage
                Case AjaxControlToolkit.AsyncFileUpload.Constants.Errors.EmptyContentLength
                    message = "Empty content length!"
                Case AjaxControlToolkit.AsyncFileUpload.Constants.Errors.FileNull
                    message = "Fill NULL!"
                Case AjaxControlToolkit.AsyncFileUpload.Constants.Errors.InputStreamNull
                    message = "Input Stream NULL!"
                Case AjaxControlToolkit.AsyncFileUpload.Constants.Errors.NoFileName
                    message = "No File Name!"
                Case AjaxControlToolkit.AsyncFileUpload.Constants.Errors.NoFiles
                    message = "No Files!"
            End Select
            LblMessage.Text = message 
        End Sub
    

    尝试更改表单的编码类型:

    <form id="form1" enctype="multipart/form-data" runat="server">
    

    【讨论】:

    • 没有达到那个断点。这是否意味着我的脚本管理器有问题?我不知道如何从这里调试...
    • @Nate:查看我的编辑并尝试更改表单的编码类型。
    • 先生,您能制作这个脚本的 C# 版本吗?我现在也面临同样的问题。
    • @BlackHatShadow:使用其中一种在线转换工具,例如这里:developerfusion.com/tools/convert/vb-to-csharp/…
    • 抱歉回复晚了。谢谢。^_^
    【解决方案2】:

    您好,您可以使用OnUploadedComplete="AsyncFileUploadPDF_UploadedComplete" 在 .cs 文件中添加

    protected void AsyncFileUploadPDF_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
            {
                if (AsyncFileUploadImage.HasFile)
                {
                    Session["AsyncFileUploadPDF"] = AsyncFileUploadImage;
                }
            }
    

    当我点击按钮的事件时,您可以从任何您想要的会话中获取数据

    protected void btnSaveParts_Click(object sender, EventArgs e)
            {
                AsyncFileUploadPDF = (AsyncFileUpload)Session["AsyncFileUploadPDF"];
                PdfFileName = AsyncFileUploadPDF.FileName;         
            }
    

    【讨论】:

    • 这真的很有帮助。^_^
    • 文件在哪里??如何保存文件?
    【解决方案3】:

    如果这对某人有帮助,我通过在表单标签中添加以下内容来解决我的问题:

    enctype="multipart/form-data" method="post"
    

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,阅读并尝试了无数关于如何解决它的帖子(显然很多人都遇到了这个问题)但没有任何效果。直到我用ToolkitScriptManager 替换了ScriptManager
      变化:

      <asp:ScriptManager ID="ScriptManager2" runat="server" ></asp:ScriptManager>
      

      与:

      <cc1:ToolkitScriptManager ID="ScriptManager2" runat="Server" />
      

      我不确定这是否是最新工具包(2013 年 12 月)的要求,但它对我有用。希望它也能对其他人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-23
        • 1970-01-01
        相关资源
        最近更新 更多