2012-03-01 3 views
0

Вот упрощенный сценарий:ASP.Net: UpdatePanel Postback файла Вложение Issue

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

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

Looking at fiddler, it seems like the Search button is posting back to "Zip.aspx" instead of itself. Is there a way I can work around this?

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

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

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

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

+0

Да, работала следующая строка: btnSearch.Attributes ["onclick"] = "document.forms [0] .action = 'Search.aspx'; + ClientScript.GetPostBackEventReference (btnSearch, null); – John

Смежные вопросы