Javascript 将hiddenfield设置为";未变;在OnValueChange之后

Javascript 将hiddenfield设置为";未变;在OnValueChange之后,javascript,asp.net,postback,hidden-field,Javascript,Asp.net,Postback,Hidden Field,在服务器端,我有以下代码: protected void DownloadExcel(object sender, EventArgs e) { byte[] arrayExcel = Convert.FromBase64String(reportBase64.Value); HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.Clear

在服务器端,我有以下代码:

    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:我写的“每次回发”都是由同一页面中的其他按钮触发的其他文件下载。

这个问题有点棘手,但我设法解决了

事实是:如果没有执行真正的回发(不认为使用文件进行响应),则该值仍然被视为“已更改”

解决此问题的唯一方法似乎是手动“重置”hiddenfield的值

我想到了这个:

self.getExcel = function (stringBase64) {
    $("#hiddenFiedlName").val(stringBase64);
    __doPostBack();
    $("#hiddenFieldName").val("");
}
回发后,该值将恢复为初始值(始终为空字符串)。这样做不会触发“ValueChanged”事件


正如jbl评论中所述,
change()
是无用的(请参考他在问题中的评论)。

我猜问题可能在这里:对于选择框、复选框和单选按钮,当用户用鼠标进行选择时,事件会立即触发,但对于其他元素类型,事件会推迟到元素失去焦点为止。“我不知道隐藏字段的焦点是如何处理的。事件的触发没有任何问题。事实上,当hiddenfield没有更改时,它也会被触发。我想知道为什么需要.change()。设置值并调用_doPostBack难道还不够吗?此外,HiddenFields是否启用了ViewState?我想他们应该。谢谢你的评论。我找到了解决办法。关于这个棘手问题的后续问题,请参考答案.thx!