赫罗。我处理的一个奇怪问题涉及两个按钮,一个HTML (客户端“导出到Excel")和一个ASP (服务器端"Go")按钮:

下面是两个按钮的html:
<asp:Button ID="btnGo" runat="server" Text="Go" OnClick="btnGoClick" Width="35px" />
<input id="btnExport" type="button" value="Export to Excel" disabled="disabled" onclick="btnExClick(this)" onmouseover="return doHover(this)" onmouseout="this.style.backgroundColor='';" style="width: 125px" />基本上,用户在下拉列表中选择要加载的贷款,然后单击"Go",查询数据库并加载数据网格。当加载数据集时,"Export“按钮将被启用,当用户上下悬停鼠标时,该按钮将切换到颜色为绿色的位置。单击时,只会触发和调用__doPostBack(btnEx.id, '');的事件。
编辑每个阴影向导的请求:这里是我的btnExClick():
function btnExClick(btn)
{
document.forms[0].target = "_blank"; //newly added line from shadowwizard
__doPostBack(btn.id, '');
}在我的代码背后,我有以下代码:
protected void Page_Load(object sender, EventArgs e)
{
.....
if (Request.Form["__EVENTTARGET"] == "btnExport")
{
this.ExportExcel();
}
}
protected void ExportExcel()
{
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("content-disposition", "attachment;filename=Optoma Loaner Report.xls");
Response.Charset = "";
this.EnableViewState = false;
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
dgResults.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}这一切都很好,我得到了一个漂亮的Excel表格。唯一的问题是在我“导出到Excel”之后,我的"Go“按钮就不再工作了。它只对__EVENTTARGET仍然= "btnExport“执行”回发“,因此它再次尝试导出到excel。它甚至没有转到服务器端onclick事件处理程序!有人知道为什么会这样吗?
我假设它与我将数据集导出到excel表的方式有关,因为当我注释掉this.ExportExcel();时,它继续正常工作(尽管"Export“按钮在我单击它之后会恢复到禁用状态,但我不知道为什么。它通常不会这样做)。
发布于 2012-08-04 00:41:03
我确实有过这个问题。
修复方法是在UseSubmitBehavior="false"按钮上设置btnGo。
UseSubmitBehavior="false"使按钮使用.NET的回发方法,该方法将单击按钮时将__EVENTTARGET设置为"btnGo“。没有它,该按钮将使用浏览器默认的提交按钮方法,使__EVENTTARGET保持不变,从而重新提交以前的"btnExport“值。
发布于 2011-03-25 18:22:24
这可能是因为您清除了响应并结束了它。在提交表单之前,我会尝试通过更改表单目标来打开新浏览器窗口中的Excel。
怎么做?通过向btnExClick函数添加这样的行:
document.forms[0].target = "_blank";希望这将导致Excel在新窗口中打开,并使原始窗口保持原样。
发布于 2011-03-25 19:42:24
通常,将excel生成器绑定到通用处理程序(.ashx文件)。处理程序的全部目的是接受两个参数并发出excel文件。
在您的页面代码中,您只需按一下按钮就可以拉出.ashx文件。
https://stackoverflow.com/questions/5436392
复制相似问题