以下是简化方案:
我有一个包含两个部分的页面:搜索部分和包含列表的结果网格。用户检查结果网格中他们想要添加到zipfile的每一行的复选框,然后单击一个按钮,该按钮会回发到另一个生成zip文件的页面。
所以我们有:
[UpdatePanel1]
...Search Inputs...
<asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" />
[/UpdatePanel1]
[UpdatePanel2]
..Results Grid..
<asp:Button ID="btnZip" runat="server" Text="Zip" PostBackUrl="~/Zip.aspx"/>
[/UpdatePanel2]
Zip.aspx中的逻辑如下所示:
SearchPage previousPage = (SearchPage)PreviousPage;
List<Files> docs = previousPage.GetSelectedFiles();
...do logic...
Response.ContentType = "application/zip";
Response.AddHeader("Content-Length", zipBytes.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=Test.zip");
Response.BinaryWrite(zipBytes);
Response.End();
页面正常工作,您可以搜索,正确填充结果网格,您可以选择任意行并按“Zip”按钮多次,并且每次都能正常工作。
但是,如果您至少点击一次“Zip”按钮,并返回搜索条件并再次点击“搜索”,则会导致此javascript错误:
Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.
Details: Error parsing near 'PK'.
看着小提琴手,似乎搜索按钮正在回复“Zip.aspx”而不是自己。我有办法解决这个问题吗?
答案 0 :(得分:1)
看着小提琴手,好像搜索按钮正在回复 “Zip.aspx”而不是自己。我有办法解决这个问题吗?
如果是这种情况,请尝试向SearchButton添加OnClientClick处理程序,并确保将表单操作设置为“搜索”页面本身而不是Zip.aspx
类似的东西:
function CheckPostBackURL()
{
document.getElementById('aspNetForm').action="Search.aspx";
}
我不知道它是否会奏效,但这是一个想法。