Не удается заставить AsyncFileUpload работать в панели обновления - PullRequest
5 голосов
/ 24 марта 2011

У меня есть пользовательский элемент управления с панелью обновления, диспетчером сценариев и элементом управления asyncfileupload.

<%@ 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 имя файла - ничто. Я не могу получить ссылку на файл, который должен быть загружен.

-Nate

UPDATE
Я добавил

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

Я не могу достичь точки останова в операторе «если» после того, как выберу файл. Я думаю, что на моей странице что-то не так с тем, как работает ajax? Не уверен, что это такое.

FIXED!
Я отображал окно загрузки ajax с помощью переключателя с видимым = true / false div. Ответ сказал мне, что контроль должен быть там, страница загружается. Я забрал div и все заработало! Теперь я сделаю шоу / скрыть через jquery (что я должен был сделать в первую очередь).

Ответы [ 4 ]

8 голосов
/ 24 марта 2011

Убедитесь, что пользовательский контроль с управлением asyncfileupload не загружается асинхронно, например, через Response.Redirect ("pageWithUploadControl").

Обрабатывали ли вы событие FileUploadComplete и проверяли, является ли AsyncFileUploadState успешным?

   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">
4 голосов
/ 05 сентября 2011

Привет, вы можете сделать это, используя OnUploadedComplete="AsyncFileUploadPDF_UploadedComplete" в файле .cs add

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 голосов
/ 18 июня 2012

В случае, если это кому-то поможет, я исправил свою проблему, добавив в тег формы следующее:

enctype="multipart/form-data" method="post"
0 голосов
/ 17 апреля 2014

У меня была та же проблема, я прочитал и перепробовал бесчисленные сообщения о том, как ее исправить (очевидно, у многих людей есть эта проблема), но ничего не помогло. Пока я не заменил ScriptManager на ToolkitScriptManager
Изменение:

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

с:

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

Я не уверен, является ли это требованием к последнему набору инструментов (декабрь 2013 г.), но он сработал для меня. Надеюсь, это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...