ASP.Net: проблема с прикрепленными файлами в файле обратной передачи UpdatePanel - PullRequest
0 голосов
/ 01 марта 2012

Вот упрощенный сценарий:

У меня есть страница с двумя разделами: раздел поиска и таблица результатов, которая содержит список.Пользователь устанавливает флажок для каждой строки в таблице результатов, которую он хотел бы добавить в zip-файл, а затем нажимает кнопку, которая возвращает обратно на другую страницу, которая генерирует 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'.

Глядя на fiddler, кажется, что кнопка «Поиск» отправляет сообщение обратно в «Zip.aspx» вместо себя.Есть ли способ, которым я могу обойти это?

1 Ответ

1 голос
/ 01 марта 2012

Глядя на fiddler, кажется, что кнопка «Поиск» отправляет обратно в «Zip.aspx» вместо себя.Есть ли способ обойти это?

Если это так, попробуйте добавить обработчик OnClientClick в SearchButton и убедитесь, что действие формы установлено на самой странице поиска, а не на Zip.aspx

Что-то вроде:

function CheckPostBackURL()
{
   document.getElementById('aspNetForm').action="Search.aspx";
}

Я не знаю, сработает ли это, но это идея.

...