Response.redirect Onselectedindexchanged继续触发后
我正在构建一个Web表单来使用response.redirect()从Srss中调出报告。 在此之后,每当发生另一次回发时,相同的onselectedindexchanged事件将继续触发。 是否需要采取措施来清除事件?
例如,当ddlBlankForms索引更改时,事件将触发,而response.redirect将使文件下载。 但是下拉列表不会像代码所示那样返回到索引0。 现在,在更多事件(例如其他一个下拉列表)之后,ddlBlankForms_OnSelectedIndexChanged会继续尝试触发。 如果我删除response.redirect它似乎工作,但它打败了打开文件的目的。
代码背后。
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 = "https://reportserver"; url += sqlCommands.GetSpecificFormReportName(ddlType.SelectedValue); url += "&BU=" + ddlBusinessUnit.SelectedValue; url += "&TID=" + ddlTask.SelectedValue; url += "&rs:Format=PDF"; Response.Redirect(url); //Response.Redirect("https://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 = "https://reportserver"; url += ddlBlankForms.SelectedValue; url += "&BU="; url += "&TID="; url += "&rs:Format=PDF"; ddlBlankForms.SelectedIndex = 0; Response.Redirect(url); //Response.End(); }
ASP。
你试过跟随吗?
Response.Redirect(url, false);
我建议您使用Page_Load
event
: 当此事件触发时,页面及其控件将完全初始化,并恢复其先前的值。 也可以使用IsPostBack
property
。 但是对于Page_Init
event
:框架使用此事件通过回发或视图状态数据将Web控件的属性设置为其先前的值。
所以你可以尝试这个:
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("", "")); } }
并将Page_Init
留空
the protected void Page_Init(object sender, EventArgs e) { //empty }
我希望它会对你有所帮助。 它只是许多人之间的解决方案。
更新
protected void ddlTask_OnSelectedIndexChanged(object sender, EventArgs e) { if (ddlTask.SelectedIndex == 0) return; string url = "https://reportserver"; url += sqlCommands.GetSpecificFormReportName(ddlType.SelectedValue); url += "&BU=" + ddlBusinessUnit.SelectedValue; url += "&TID=" + ddlTask.SelectedValue; url += "&rs:Format=PDF"; Response.Redirect(url, false);//false to allow the code to continue execution Return; }
我对此有一个“部分”修复。 这不是100%,应该被视为“黑客”。
基本上,页面必须在浏览器中呈现,以便ViewState
包含“已清除”下拉列表。
public class ResponseStuff { public static void ClientRedirect(Page page,string url) { string script = ""; page.RegisterClientScriptBlock("client_redirect",script); } }
通过呼叫
ddl.ClearSelection(); ResponseStuff.ClientRedirect(this,url);
黑客警报警告:在此修复之前,按两次(快速)浏览器后退按钮会导致相同的行为。 单击后退按钮时,将再次执行重定向,但下拉菜单将被“清除”。 这需要JQuery。
上述就是C#学习教程:Response.redirect Onselectedindexchanged继续触发后分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/988731.html