赫罗。我有一个奇怪的问题,我正在处理它涉及两个按钮,一个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”,查询数据库并加载数据网格。加载数据网格时,“导出到Excel”按钮变为启用状态,当用户将鼠标悬停在熄灭状态时,将变为绿色和绿色。点击后,它会触发,只会调用__doPostBack(btnEx.id, '');
编辑每个ShadowWizard的请求:这是我的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”之后,我的“开始”按钮不再有效。它只是使用__EVENTTARGET仍然=“btnExport”执行“回发”,因此它会尝试再次导出到excel ..它甚至没有转到它的服务器端onclick事件处理程序!有谁知道为什么会这样?
我假设它与我将数据网格导出到Excel工作表的方式有关,因为当我注释掉this.ExportExcel();
时,它继续正常工作(尽管“导出到Excel”按钮点击它后再回到被禁用状态,我不知道为什么。通常不这样做。)
答案 0 :(得分:3)
我有这个问题。
修复方法是在UseSubmitBehavior="false"
按钮上设置btnGo
。
UseSubmitBehavior="false"
会使该按钮使用.NET的回发方法,该方法会将__EVENTTARGET
设置为&#34; btnGo
&#34;单击按钮时。没有它,该按钮使用浏览器的默认方法提交按钮,使__EVENTTARGET
保持不变,因此重新提交以前的值&#34; btnExport
&#34;。
答案 1 :(得分:1)
这可能是因为您清除响应并结束它。我会尝试在提交表单之前更改表单目标,在新的浏览器窗口中打开Excel。
怎么做?通过在btnExClick
函数中添加这样的行:
document.forms[0].target = "_blank";
希望这会导致Excel在新窗口中打开并保持原始窗口不变。
答案 2 :(得分:0)
通常,您将excel生成器绑定到通用处理程序(.ashx文件)。处理程序的全部目的是获取一些参数并发出excel文件。
在您的页面代码中,您只需单击按钮即可拉出.ashx文件。
答案 3 :(得分:0)
没有得到太多回应,也许我可以激起一些回应。我认为这可能发生的原因是因为响应没有被返回到“浏览器”,可以这么说,而是返回到excel表。我认为这就是为什么我没有看到我的html控件恢复到默认状态,就像它们通常应该在回发上一样。所以也许当我尝试做另一个回发时,它仍然像以前一样给它提供相同的回发..但是我怎么能阻止它...
好吧,我使用html按钮的全部原因是做一个奇特的颜色变化。如果我使用ASP:按钮onclick处理程序来执行我的导出,它工作正常,我没有遇到任何问题。我不确定问题出在哪里,在使用html按钮和__doPostBack()以及asp按钮onclick事件之间做同样的事情。
答案 4 :(得分:0)
我有同样的问题 - 获取数据的ASP按钮和将其导出到Excel的html按钮。我的解决方案是从ASP按钮“OnClientClick”调用JavaScript来清除__EVENTTARGET值:
OnClientClick="clearEVENTTARGET(); return true;"
function clearEVENTTARGET() {
this.<form name here>.__EVENTTARGET.value = '';
};