加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – AJAX updatepanel给出错误

发布时间:2020-12-16 09:59:37 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试使用 AJAX UpdateProgress在创建zip文件时显示加载图像但是出现以下错误: Microsoft JScript运行时错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息.此错误的常见原因是通过调用Response.Write(),响应过
我正在尝试使用 AJAX UpdateProgress在创建zip文件时显示加载图像但是出现以下错误:

Microsoft JScript运行时错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息.此错误的常见原因是通过调用Response.Write(),响应过滤器,HttpModules或服务器跟踪来修改响应. Detals:解析’PK’附近时出错.

下面是我的.aspx页面的代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        #progressBackgroundFilter
        {
            position: fixed;
            top: 0px;
            bottom: 0px;
            left: 0px;
            right: 0px;
            overflow: hidden;
            padding: 0;
            margin: 0;
            background-color: #000;
            filter: alpha(opacity=50);
            opacity: 0.5;
            z-index: 1000;
        }

        #processMessage
        {
            position: fixed;
            top: 30%;
            left: 43%;
            padding: 10px;
            width: 14%;
            z-index: 1001;
            background-color: #fff;
            border: solid 1px #000;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:CheckBox ID="chb_pass" runat="server" Text="Do you want the zip file to have a password?"
                    AutoPostBack="True" />
                <br />
                <asp:TextBox ID="txt_password" runat="server" MaxLength="20" Visible="false" Style="margin-top: 6px"
                    Width="152px"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txt_password"
                    ErrorMessage="* Need Password!"></asp:RequiredFieldValidator>
                <br />  
        <asp:Button ID="btnDownloadPhotos" runat="server" Text="Download Album Photos" Height="27px"
                    Style="margin-top: 3px" Width="284px" />


            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="btnDownloadPhotos" EventName="Click" />
            </Triggers>
        </asp:UpdatePanel>
        <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
            <ProgressTemplate>
                <div id="progressBackgroundFilter">
                </div>
                <div id="processMessage">
                    Preparing download...<br />
                    <br />
                    <img alt="Loading" src="img/ajax-loader.gif" />
                   </div>
             </ProgressTemplate>
        </asp:UpdateProgress> 
       </div>
    </form>
</body>
</html>

…以下是aspx.vb页面的代码

Imports System.IO
Imports System.Text
Imports Ionic.Zip

Partial Class download
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object,ByVal e As System.EventArgs) Handles btnDownloadPhotos.Click

        Dim PhotoFileList As New List(Of String)
        Dim uploadDirectory As String = Server.MapPath("") & "uploads"
        Dim albumName As String = "cricket"

        PhotoFileList.Add(uploadDirectory & "CIMG1455.JPG")
        PhotoFileList.Add(uploadDirectory & "CIMG1453.JPG")
        PhotoFileList.Add(uploadDirectory & "CIMG1451.JPG")
        PhotoFileList.Add(uploadDirectory & "CIMG1450.JPG")

        createZip(PhotoFileList,albumName)

    End Sub

    Private Sub createZip(ByVal listOfFilename As List(Of String),ByVal albumName As String)

        ' Tell the browser we're sending a ZIP file!
        Dim downloadFileName As String = String.Format(albumName & "-{0}.zip",DateTime.Now.ToString("yyyy-MM-dd-HH_mm_ss"))
        Response.ContentType = "application/zip"
        Response.AddHeader("Content-Disposition","filename=" & downloadFileName)

        ' Zip the contents of the selected files
        Using zip As New ZipFile()
            'Add the password protection,if specified
            If chb_pass.Checked = True Then
                zip.Password = txt_password.Text

                'This encryption is weak! Please see http://cheeso.members.winisp.net/DotNetZipHelp/html/24077057-63cb-ac7e-6be5-697fe9ce37d6.htm for more details
                zip.Encryption = EncryptionAlgorithm.PkzipWeak
            End If

            ' Construct the contents of the README.txt file that will be included in this ZIP
            Dim readMeMessage As String = String.Format("This ZIP file {0} contains the following photos within the " & albumName & " album:{1}{1}",downloadFileName,Environment.NewLine)

            ' Add the checked files to the ZIP
            For Each li As String In listOfFilename.ToArray()
                ' Record the file that was included in readMeMessage
                readMeMessage &= String.Concat(vbTab,"* ",li.ToString,Environment.NewLine)

                ' Now add the file to the ZIP (use a value of "" as the second parameter to put the files in the "root" folder)
                zip.AddFile(li.ToString,"Your Files")

            Next

            ' Add the README.txt file to the ZIP
            zip.AddEntry("README.txt",readMeMessage,Encoding.ASCII)

            ' Send the contents of the ZIP back to the output stream
            zip.Save(Response.OutputStream)
        End Using
    End Sub

    Protected Sub chb_pass_CheckedChanged(ByVal sender As Object,ByVal e As System.EventArgs) Handles chb_pass.CheckedChanged
        If chb_pass.Checked = True Then
            txt_password.Visible = True
        ElseIf chb_pass.Checked = False Then
            txt_password.Visible = False
        End If
    End Sub
End Class

我有什么想法可以解决这个问题吗?任何帮助将不胜感激.

谢谢

解决方法

我在过去尝试使用更新面板内的按钮流式传输Excel文档时遇到了类似的问题.这是我的解决方案,希望它有所帮助.

VB.NET:

Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load

    Dim sm = ScriptManager.GetCurrent(Me.Page)
    sm.RegisterPostBackControl(Me.YOUR_BUTTON)

    AddPostBackTrigger(Me.YOUR_BUTTON.UniqueID.ToString())

End Sub


Public Sub AddPostBackTrigger(ByVal ControlId As String)
    Dim existingTrigger = FindPostBackTrigger(ControlId)
    If existingTrigger Is Nothing Then
        Dim trigger As New PostBackTrigger()
        trigger.ControlID = ControlId
        Me.YOUR_UPDATE_PANEL_GOES_HERE.Triggers.Add(trigger)
    End If
End Sub
Public Sub RemovePostBackTrigger(ByVal ControlId As String)
    Dim existingTrigger = FindPostBackTrigger(ControlId)
    If existingTrigger IsNot Nothing Then
        Me.YOUR_UPDATE_PANEL_GOES_HERE.Triggers.Remove(existingTrigger)
    End If
End Sub
Private Function FindPostBackTrigger(ByVal ControlId As String) As PostBackTrigger
    For Each Trigger In Me.YOUR_UPDATE_PANEL_GOES_HERE.Triggers
        If Trigger.GetType().Name = "PostBackTrigger" Then
            Dim pt = CType(Trigger,PostBackTrigger)
            If pt.ControlID = ControlId Then
                Return pt
            End If
        End If
    Next
    Return Nothing
End Function

C#:

protected void Page_Load(object sender,EventArgs e)
{
    ScriptManager sm = ScriptManager.GetCurrent(Page);
    if (sm != null) sm.RegisterPostBackControl(YOUR_CONTROL);
    AddPostBackTrigger(YOUR_CONTROL.UniqueID);
}

private void AddPostBackTrigger(string controlId)
{
    PostBackTrigger existingTrigger = FindPostBackTrigger(controlId);

    if (existingTrigger != null)
    {
        var trigger = new PostBackTrigger {ControlID = controlId};
        YOUR_UPDATE_PANEL.Triggers.Add(trigger);
    }
}

private PostBackTrigger FindPostBackTrigger(string controlId)
{
    return
        YOUR_UPDATE_PANEL
            .Triggers.OfType<PostBackTrigger>()
            .FirstOrDefault(pt => pt.ControlID == controlId);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读