之后的Response.Redirect Onselectedindexchanged保持射击 [英] After Response.redirect Onselectedindexchanged keeps firing

查看:109
本文介绍了之后的Response.Redirect Onselectedindexchanged保持射击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个网页表单我建立弹出Response.Redirect的使用从SRSS报告()。这虽然每当另一个回传后会发生同样的事件onselectedindexchanged持续开火。有什么需要发生清除事件?

例如,当ddlBlankForms指数的变化,事件触发和Response.Redirect的使文件下载。但是,在下拉列表中没有返回到索引0像code建议。而现在更多事件例如像其他的下拉列表中的一个之后,ddlBlankForms_OnSelectedIndexChanged不停地尝试射击。如果我删除它似乎工作的Response.Redirect但它失败的目的是要打开的文件。

code的后面。

 保护无效的Page_Load(对象发件人,EventArgs的发送)
    {
        如果(!的IsPostBack)
        {
        ddlBusinessUnit.DataSource = sqlCommands.GetBusinessUnits();
        ddlBusinessUnit.DataValueField =BusinessUnit;
        ddlBusinessUnit.DataBind();
        ddlBusinessUnit.Items.Insert(0,新的ListItem(,));        ddlBlankForms.DataSource = sqlCommands.GetForms();
        ddlBlankForms.DataTextField =FormDesc;
        ddlBlankForms.DataValueField =FormReport;
        ddlBlankForms.DataBind();
        ddlBlankForms.Items.Insert(0,新的ListItem(,));
    }
}保护无效Page_Init(对象发件人,EventArgs的发送)
{
    //ddlBusinessUnit.DataSource = sqlCommands.GetBusinessUnits();
    //ddlBusinessUnit.DataValueField =BusinessUnit;
    //ddlBusinessUnit.DataBind();
    //ddlBusinessUnit.Items.Insert(0,新的ListItem(,));    //ddlBlankForms.DataSource = sqlCommands.GetForms();
    //ddlBlankForms.DataTextField =FormDesc;
    //ddlBlankForms.DataValueField =FormReport;
    //ddlBlankForms.DataBind();
    //ddlBlankForms.Items.Insert(0,新的ListItem(,));
}保护无效ddlBusinessUnit_OnSelectedIndexChanged(对象发件人,EventArgs的发送)
{
    ddlType.DataSource = sqlCommands.GetTypes(ddlBusinessUnit.SelectedValue);
    ddlType.DataValueField =FormID;
    ddlType.DataTextField =TYPEDESC;
    ddlType.DataBind();
    ddlType.Items.Insert(0,新的ListItem(,));
}保护无效ddlType_OnSelectedIndexChanged(对象发件人,EventArgs的发送)
{
    ddlTask​​.DataSource = sqlCommands.GetTasks(ddlType.SelectedValue,ddlBusinessUnit.SelectedValue);
    ddlTask​​.DataValueField =的TaskID;
    ddlTask​​.DataBind();
    ddlTask​​.Items.Insert(0,新的ListItem(,));
}保护无效ddlTask​​_OnSelectedIndexChanged(对象发件人,EventArgs的发送)
{
    如果(ddlTask​​.SelectedIndex == 0)回报;
    字符串的URL =HTTP://的reportserver
    网址+ = sqlCommands.GetSpecificFormReportName(ddlType.SelectedValue);
    网址+ =&放大器; BU =+ ddlBusinessUnit.SelectedValue;
    网址+ =&放大器; TID =+ ddlTask​​.SelectedValue;
    网址+ =&放大器; RS:格式= PDF;
    的Response.Redirect(URL);
    //Response.Redirect(\"http://mje-imtmisql03/reportserver?/QAQC_Reports/QCBore&BU=251Template&TID=Required1&rs:Format=PDF\");
}保护无效ddlBlankForms_OnSelectedIndexChanged(对象发件人,EventArgs的发送)
{
    如果(ddlBlankForms.SelectedIndex == 0)回报;
    字符串的URL =HTTP://的reportserver
    网址+ = ddlBlankForms.SelectedValue;
    网址+ =&放大器; BU =;
    网址+ =&放大器; TID =;
    网址+ =&放大器; RS:格式= PDF;
    ddlBlankForms.SelectedIndex = 0;
    的Response.Redirect(URL);
    //Response.End();
}

ASP。

 < ASP:DropDownList的=服务器ID =ddlBlankFormsOnSelectedIndexChanged =ddlBlankForms_OnSelectedIndexChanged的AutoPostBack =真WIDTH =300像素/>
< ASP:DropDownList的=服务器ID =ddlTask​​OnSelectedIndexChanged =ddlTask​​_OnSelectedIndexChanged的AutoPostBack =真的EnableViewState =真WIDTH =200像素/>
< ASP:DropDownList的=服务器ID =ddlTypeOnSelectedIndexChanged =ddlType_OnSelectedIndexChanged的AutoPostBack =真的EnableViewState =真WIDTH =200像素/>
< ASP:DropDownList的=服务器OnSelectedIndexChanged =ddlBusinessUnit_OnSelectedIndexChanged的AutoPostBack =真的EnableViewState =真正的ID =ddlBusinessUnitWIDTH =200像素/>


解决方案

我对这个部分修补程序。这不是100%,并应被视为一个黑客。

基本上网页在浏览器呈现,以使的ViewState 来包含清理下拉列表中。

 公共类ResponseStuff
{
    公共静态无效ClientRedirect(页页面,字符串URL)
    {
        字符串脚本=<脚本类型=文/ JavaScript的RUNAT ='客户'> $(函数(){了window.location ='+ page.ResolveUrl(URL)+;});< /脚本>中;
        page.RegisterClientScriptBlock(client_redirect脚本);
    }
}

通过

称为

  ddl.ClearSelection();
ResponseStuff.ClientRedirect(这一点,URL);

破解警报警告:击中浏览器的后退按钮两次(快)导致此修复程序之前相同的行为。当单击后退按钮时,再次进行重定向,但是下拉被清除。这需要JQuery的。

I have a web form I am building to bring up reports from Srss using response.redirect(). After this though whenever another postback happens the same onselectedindexchanged events keep firing. Is there something that needs to happen to clear the event?

For example, when the ddlBlankForms index changes, the event fires and the response.redirect makes the file download. But the drop down list does not return to index 0 like the code suggests. And now after any more events like for example one of the other drop down lists, the ddlBlankForms_OnSelectedIndexChanged keeps trying to fire. If I remove the response.redirect it seems to work but it defeats the purpose which is to open the file.

Code Behind.

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        ddlBusinessUnit.DataSource = sqlCommands.GetBusinessUnits();
        ddlBusinessUnit.DataValueField = "BusinessUnit";
        ddlBusinessUnit.DataBind();
        ddlBusinessUnit.Items.Insert(0, new ListItem("", ""));

        ddlBlankForms.DataSource = sqlCommands.GetForms();
        ddlBlankForms.DataTextField = "FormDesc";
        ddlBlankForms.DataValueField = "FormReport";
        ddlBlankForms.DataBind();
        ddlBlankForms.Items.Insert(0, new ListItem("", ""));
    }
}

protected void Page_Init(object sender, EventArgs e)
{
    //ddlBusinessUnit.DataSource = sqlCommands.GetBusinessUnits();
    //ddlBusinessUnit.DataValueField = "BusinessUnit";
    //ddlBusinessUnit.DataBind();
    //ddlBusinessUnit.Items.Insert(0, new ListItem("", ""));

    //ddlBlankForms.DataSource = sqlCommands.GetForms();
    //ddlBlankForms.DataTextField = "FormDesc";
    //ddlBlankForms.DataValueField = "FormReport";
    //ddlBlankForms.DataBind();
    //ddlBlankForms.Items.Insert(0, new ListItem("", ""));
}

protected void ddlBusinessUnit_OnSelectedIndexChanged(object sender, EventArgs e)
{
    ddlType.DataSource = sqlCommands.GetTypes(ddlBusinessUnit.SelectedValue);
    ddlType.DataValueField = "FormID";
    ddlType.DataTextField = "TypeDesc";
    ddlType.DataBind();
    ddlType.Items.Insert(0, new ListItem("", "")); 
}

protected void ddlType_OnSelectedIndexChanged(object sender, EventArgs e)
{
    ddlTask.DataSource = sqlCommands.GetTasks(ddlType.SelectedValue, ddlBusinessUnit.SelectedValue);
    ddlTask.DataValueField = "TaskID";
    ddlTask.DataBind();
    ddlTask.Items.Insert(0, new ListItem("", "")); 
}

protected void ddlTask_OnSelectedIndexChanged(object sender, EventArgs e)
{
    if (ddlTask.SelectedIndex == 0) return;
    string url = "http://reportserver";
    url += sqlCommands.GetSpecificFormReportName(ddlType.SelectedValue);
    url += "&BU=" + ddlBusinessUnit.SelectedValue;
    url += "&TID=" + ddlTask.SelectedValue;
    url += "&rs:Format=PDF";
    Response.Redirect(url);


    //Response.Redirect("http://mje-imtmisql03/reportserver?/QAQC_Reports/QCBore&BU=251Template&TID=Required1&rs:Format=PDF");
}

protected void ddlBlankForms_OnSelectedIndexChanged(object sender, EventArgs e)
{
    if (ddlBlankForms.SelectedIndex == 0) return;
    string url = "http://reportserver";
    url += ddlBlankForms.SelectedValue;
    url += "&BU=";
    url += "&TID=";
    url += "&rs:Format=PDF";
    ddlBlankForms.SelectedIndex = 0;
    Response.Redirect(url);
    //Response.End();
}

ASP.

<asp:DropDownList runat="server" ID="ddlBlankForms" OnSelectedIndexChanged="ddlBlankForms_OnSelectedIndexChanged" AutoPostBack="True" Width="300px"/>
<asp:DropDownList runat="server" ID="ddlTask" OnSelectedIndexChanged="ddlTask_OnSelectedIndexChanged" AutoPostBack="true" EnableViewState="True" Width="200px"/>
<asp:DropDownList runat="server" ID="ddlType" OnSelectedIndexChanged="ddlType_OnSelectedIndexChanged" AutoPostBack="True" EnableViewState="True" Width="200px"/>
<asp:DropDownList runat="server" OnSelectedIndexChanged="ddlBusinessUnit_OnSelectedIndexChanged" AutoPostBack="True" EnableViewState="true" ID="ddlBusinessUnit" Width="200px"/>

解决方案

I have a "partial" fix for this. It's not 100%, and should be considered a "hack".

Basically the page has to render in the browser in order for the ViewState to contain the "cleared" drop down list.

public class ResponseStuff
{
    public static void ClientRedirect(Page page,string url)
    {
        string script = "<script type='text/javascript' runat='client'>$(function() {window.location='" + page.ResolveUrl(url) + "';});</script>";
        page.RegisterClientScriptBlock("client_redirect",script);
    }
}

called via

ddl.ClearSelection();
ResponseStuff.ClientRedirect(this,url);

hack alert caveats: Hitting the browser back button twice (fast) causes the same behavior before this fix. When the back button is clicked, a redirect is again performed, however the drop down is "cleared". This requires JQuery.

这篇关于之后的Response.Redirect Onselectedindexchanged保持射击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆