Есть пара вещей, которые вы, вероятно, делаете неправильно.
Прежде всего, инициализация диалогового окна, где вы его ставили? в
$(document).ready( function() { ... } );
если нет, вам следует. Полагая, что вы действительно перенаправляете пользователя, и в этом перенаправлении вы перенаправляете на предыдущую страницу (ту, у которой есть диалог), так что (документ) .ready снова запускается и инициализирует диалог.
Но, используя ASP.NET, вы не должны делать это так, как вы, думайте о простой форме для вас и пользователя.
Используя .load в jQuery, вы можете загрузить другую страницу, поэтому давайте представим, что у вас есть кнопка в диалоге «Я согласен», которая дает пользователю запрошенный файл:
$(document).ready( function() {
$("#terms-dialog").dialog({
modal: true,
autoOpen: false,
autoResize: false,
height: 420,
width: 500,
overlay: {
opacity: 0.5,
background: "black"
},
buttons: {
I do not agree: function() { $(this).dialog('close'); }
I agree: function() {
GetFileIfCookieExist("myfile.xls");
$(this).dialog('close');
}
}
});
});
function GetFileIfCookieExist(file) {
// create cookie here
$.load("getFile.aspx", { "f": file }, function() {
// you can show a "loading" image
});
}
в вашем getFile.aspx удалите весь HTML-код, кроме 1-й строки, и в событии Page_Load с выделенным кодом обработайте запрос и запишите документ обратно, используя метод Response.Write, например:
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=" + Request["f"]);
Response.Charset = "";
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
stringWrite = AppendMyFile();
Response.Write(stringWrite.ToString());
Response.End();
не забудьте создать файл cookie в запросе и проверить этот файл cookie на странице aspx, если он не существует, потому что пользователь принудительно загрузил его, а затем удалить файл cookie перед отправкой файла обратно пользователю.
cookie - это всего лишь стратегия, обеспечивающая возможность доступа, но она не безупречна, поскольку вам нужно, чтобы у пользователя были включены куки (как это делает Hotmail, чтобы вы могли читать электронную почту на его веб-сайте), вы можете использовать объект Session или другой метод, который Вы можете думать о.
Это только для того, чтобы вы могли лучше понять, что вы можете сделать.