2011-03-25 28 views
1

Herro。我有我处理的是一个奇怪的问题涉及到两个按钮,一个HTML(客户端“导出到Excel”)和ASP(服务器端“转到”)按钮:奇怪的__EVENTTARGET行为,可能的错误?

enter image description here

这里对于两个按钮的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" /> 

基本上用户在下拉选择向下,加载哪些贷款,并单击“开始”,其查询数据库,并将数据网格。当加载数据网格时,“导出到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 still =“btnExport”执行“回发”,因此它会尝试再次导出到Excel。它甚至不会进入其服务器端的onclick事件处理程序!有谁知道为什么会发生这种情况?
我假设它与我将数据网格导出到Excel工作表的方式有关,因为当我注释掉this.ExportExcel();时,它仍然可以正常工作(尽管“导出到Excel”按钮可以返回到被禁用之后我点击它,我不知道为什么,通常不会那样)。

+0

“虽然‘导出到Excel’按钮返回到被禁用后,我点击它,我不知道为什么呢?它通常不会这样做“我猜这是html控件在回发时回到默认状态的正常行为..所以为了不这样做(比如在取消注释ExportExcel()的时候)会说些什么是错误的... – 2011-03-25 21:03:24

+0

你解决了这个问题,或者你只是切换到使用ASP按钮,而不是输入控制? – IgorShch 2015-02-18 13:18:37

回答

1

这可能是因为您清除响应并结束它..我会尝试在提交表单之前通过更改表单目标在新的浏览器窗口中打开Excel。

如何做到这一点?通过添加这样的行btnExClick功能:

document.forms[0].target = "_blank"; 

希望这将导致Excel以在新窗口中打开,离开原来的窗口不变。

+0

“这可能是因为你清除响应并结束它”可能是真的,但那并没有解决它。它打开一个新的浏览器窗口和excel工作表,然后当我“退出”excel表单时它们都关闭,而我的“Go”按钮现在也执行相同的操作 – 2011-03-25 18:30:51

+0

当我注释掉Response.clear()和/或Response.end )我得到了我的Excel表中的整个网页,并没有解决任何问题:( – 2011-03-25 18:36:48

+0

@Nick这很奇怪..请发布'btnExClick'函数的代码,我们将看到什么可能会导致这种情况。 – 2011-03-25 22:00:19

0

通常,您将excel生成器绑定到通用处理程序(.ashx文件)。处理程序的全部目的是获取几个参数并发送excel文件。

在您的页面代码中,只需将按钮单击即可拉出.ashx文件。

+0

谢谢你的回应。我尝试了这一点,我想不出通过我的StringWriter对象到这个ASHX文件的方式,除非通过查询字符串..这似乎马虎,但我想我会尝试下一步。我只是试图通过会话,但我无法检索ASHX文件中的Session变量“对象引用未设置为对象实例”异常 – 2011-03-25 23:07:19

+0

我无法通过queryString传递它。我得到一个错误,说查询字符串不能包含新的行字符XD也许我会把这个 – 2011-03-25 23:18:50

+0

赏金好吧,所以我在我的ASHX文件中实现了System.Web.SessionState.IReadOnlySessionState,并能够读取我的会话变量。它的工作!除了它丝毫没有解决我的问题!我甚至尝试添加另一个随机的asp:按钮,只是单击时更改标签的文本。一旦我的Excel工作表被创建,页面上的所有按钮只需用__EVENTTARGET“btnExport”回发! >< – 2011-03-25 23:40:31

0

没有太多的回应,也许我可以点燃一些。我认为这可能发生的原因是因为响应没有被返回到“浏览器”,可以这么说,而是返回到Excel表格。我想这就是为什么我没有看到我的html控件回到默认状态,就像他们通常应该在回发中一样。所以,也许当我尝试做另一回传其依旧如故喂养它同回传..但我怎么能防止..

好了,整个原因,我使用HTML按钮是做一个奇特的颜色变化。如果我使用ASP:Button onclick处理程序来执行我的导出,它工作正常,我没有问题。我不知道问题出在哪里,在使用html按钮和__doPostBack()以及一个asp按钮onclick事件之间做同样的事情。

3

我有这个确切的问题。

修复方法是在btnGo按钮上设置UseSubmitBehavior="false"

UseSubmitBehavior="false"导致按钮使用.NET的回传方法,当点击该按钮时,将__EVENTTARGET设置为“btnGo”。没有它,该按钮使用浏览器的提交按钮的默认方法,使__EVENTTARGET保持不变,因此重新提交之前的值“btnExport”。

+0

嗨撕碎机。这是否解决了这个问题? – maddog2k 2013-05-31 21:13:47

0

我有同样的问题 - 一个ASP按钮来获取数据和一个HTML按钮将其导出到Excel。我的解决办法是从ASP按钮“的OnClientClick”调用JavaScript来清除__EVENTTARGET值:

OnClientClick="clearEVENTTARGET(); return true;" 

function clearEVENTTARGET() { 
     this.<form name here>.__EVENTTARGET.value = ''; 
    };