Более простой подход состоит в том, чтобы просто сделать все необходимое в событии PostBack
и зарегистрировать сценарий перезагрузки с дополнительным аргументом, указывающим загрузку.Что-то вроде:
C # код:
protected void SaveDownloadCount(int downloadId)
{
// Run in a PostBack event.
// 1) Register download count, refresh page, etc.
// 2) Register a script to reload the page with an additional parameter to indicate the download.
Page.ClientScript.RegisterStartupScript(GetType(), "download",
"$(document).ready(function(){window.location.href = window.location.pathname + window.location.search ? '&' : '?' + 'printId={0}';});".Replace("{0}", downloadId.ToString()), true);
}
Затем в PageLoad
нам нужно проверить параметр загрузки и предоставить файл:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int printId;
if (Request.QueryString["printId"] != null && int.TryParse(Request.QueryString["printId"], out printId))
{
// Check if the argument is valid and serve the file.
}
else
{
// Regular initialization
}
}
}
Thisявляется символом ответа @puddleglum, но без недостатка тайм-аута "не синхронизировано".