在服务器端,我有以下代码:
protected void DownloadExcel(object sender, EventArgs e)
{
byte[] arrayExcel = Convert.FromBase64String(reportBase64.Value);
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.AppendHeader("content-length", arrayExcel.Length.ToString());
HttpContext.Current.Response.AppendHeader("content-disposition", "attachment;filename=excelName.xls");
HttpContext.Current.Response.ContentType = "application/Excel";
HttpContext.Current.Response.BinaryWrite(arrayExcel);
HttpContext.Current.Response.End();
HttpContext.Current.Response.Close();
HttpContext.Current.Response.Flush();
}
此方法绑定到“OnValueChanged”事件,该事件由这个小js触发:
self.getExcel = function (stringBase64) {
$("#hiddenFiedlName").val(stringBase64).change();
__doPostBack();
}
第一次触发事件后,每次回发都会触发该事件。我认为这种奇怪的行为发生是因为js代码修改的“更改触发器”不会被真正的回发清除。
现在,我的假设是对的吗?如果是这样,有没有办法以编程方式清除这个“更改”触发器?
谢谢
EDIT1:我写的“每次回发”是由同一页面中的其他按钮触发的其他文件下载。
答案 0 :(得分:1)
这个问题有点棘手,但我设法解决了。
事实是:如果没有执行真正的回发(对文件的响应不被认为是这样),则值仍被视为“已更改”。
解决此问题的唯一方法似乎是手动“重置”隐藏字段的值。
我想出了这个:
self.getExcel = function (stringBase64) {
$("#hiddenFiedlName").val(stringBase64);
__doPostBack();
$("#hiddenFieldName").val("");
}
回发后,值将恢复为初始值(始终为空字符串)。通过这样做,不会触发“ValueChanged”事件。
正如jbl的评论所述,change()
没用(请参阅他在问题中的评论)。