首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的__EVENTTARGET行为,可能是错误吗?

问奇怪的__EVENTTARGET行为,可能是错误吗?
EN

Stack Overflow用户
提问于 2011-03-25 18:09:39
回答 5查看 2.8K关注 0票数 1

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

​

​

下面是两个按钮的html:

代码语言:javascript
复制
<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():

代码语言:javascript
复制
function btnExClick(btn)
{
    document.forms[0].target = "_blank";  //newly added line from shadowwizard
    __doPostBack(btn.id, '');
}

在我的代码背后,我有以下代码:

代码语言:javascript
复制
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“按钮在我单击它之后会恢复到禁用状态,但我不知道为什么。它通常不会这样做)。

EN

回答 5

Stack Overflow用户

发布于 2012-08-04 00:41:03

我确实有过这个问题。

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

UseSubmitBehavior="false"使按钮使用.NET的回发方法,该方法将单击按钮时将__EVENTTARGET设置为"btnGo“。没有它,该按钮将使用浏览器默认的提交按钮方法,使__EVENTTARGET保持不变,从而重新提交以前的"btnExport“值。

票数 3
EN

Stack Overflow用户

发布于 2011-03-25 18:22:24

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

怎么做?通过向btnExClick函数添加这样的行:

代码语言:javascript
复制
document.forms[0].target = "_blank";

希望这将导致Excel在新窗口中打开,并使原始窗口保持原样。

票数 1
EN

Stack Overflow用户

发布于 2011-03-25 19:42:24

通常,将excel生成器绑定到通用处理程序(.ashx文件)。处理程序的全部目的是接受两个参数并发出excel文件。

在您的页面代码中,您只需按一下按钮就可以拉出.ashx文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5436392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档