取消UpdatePanel中的控件的局部刷新,并在空间的客户段的事件使其返回文件流不是html文件
2012-08-08 15:25
387 查看
今天接到一个变态的需求,GridView中符合查询条件的所有的记录都导成csv文件,并下到客户端。虽然这个需求最后取消了,但是我感觉我的研究还是很有价值的,所以写出来,希望对大家有所帮助。由于最后没有具体实现,所以可能本文中的示例代码可能过于简单,请大家谅解。
首先叙述一下这个需求的难点:
1. 由于需求是要求到处特定条件的记录,而且这个特定的查询条件是存放在页面里面的,所以这个就要求Request要Postback到原来的页面
2. 由于空间是在UpdatePanel中的,但是我们返回的是文件流,所以就需要把下载文件的Postback的Request变为普通的经典的Postback
3. 由于最后的需要的是文件,所以此次Postback的Request返回的是一个文件流
下面会对三个难点一一解决:
1. 这个问题比较的简单,我们可以直接用方法__doPostBack(EventTarget, EventArgument);解决
2. 由于我们的空间是在UpdatePanel里面的,所以所有过于此控件的Postback都会被看成AjaxBack,而这又不是我们需要的,经过研究我发现可以用下面两句话解决此问题:
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm._isCrossPost = true;
至此客户端的工作已经完成,相应的控件的事件就为:
function controlEvent()
{
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm._isCrossPost = true;
__doPostBack("ctl00$MainContent$Button1", '22');
return false;
}
3. 现在到了解决服务器端的问题了。借助ASP.NET的Ajax的服务器端的解决方案http://blog.csdn.net/robertdong1203/article/details/7775566
我们在控件的OnPreRender改写为:
protected override void OnPreRender(EventArgs e)
{
this.Page.SetRenderMethodDelegate(CsvExportRenderPage);
}
private void CsvExportRenderPage(HtmlTextWriter nullWriter, Control page)
{
HtmlForm form = this.Page.Form;
form.SetRenderMethodDelegate(new RenderMethod(this.CsvExportRenderForm));
}
private void CsvExportRenderForm(HtmlTextWriter nullWriter, Control form)
{
Response.ContentType = "application/pdf";
//此处添加生成文件的逻辑,然后将文件写入到Response中。简单起见,我直接读取现成的pdf文件
Response.WriteFile("Addison.Wesley.Domain.Driven.Design.pdf");
}
首先叙述一下这个需求的难点:
1. 由于需求是要求到处特定条件的记录,而且这个特定的查询条件是存放在页面里面的,所以这个就要求Request要Postback到原来的页面
2. 由于空间是在UpdatePanel中的,但是我们返回的是文件流,所以就需要把下载文件的Postback的Request变为普通的经典的Postback
3. 由于最后的需要的是文件,所以此次Postback的Request返回的是一个文件流
下面会对三个难点一一解决:
1. 这个问题比较的简单,我们可以直接用方法__doPostBack(EventTarget, EventArgument);解决
2. 由于我们的空间是在UpdatePanel里面的,所以所有过于此控件的Postback都会被看成AjaxBack,而这又不是我们需要的,经过研究我发现可以用下面两句话解决此问题:
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm._isCrossPost = true;
至此客户端的工作已经完成,相应的控件的事件就为:
function controlEvent()
{
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm._isCrossPost = true;
__doPostBack("ctl00$MainContent$Button1", '22');
return false;
}
3. 现在到了解决服务器端的问题了。借助ASP.NET的Ajax的服务器端的解决方案http://blog.csdn.net/robertdong1203/article/details/7775566
我们在控件的OnPreRender改写为:
protected override void OnPreRender(EventArgs e)
{
this.Page.SetRenderMethodDelegate(CsvExportRenderPage);
}
private void CsvExportRenderPage(HtmlTextWriter nullWriter, Control page)
{
HtmlForm form = this.Page.Form;
form.SetRenderMethodDelegate(new RenderMethod(this.CsvExportRenderForm));
}
private void CsvExportRenderForm(HtmlTextWriter nullWriter, Control form)
{
Response.ContentType = "application/pdf";
//此处添加生成文件的逻辑,然后将文件写入到Response中。简单起见,我直接读取现成的pdf文件
Response.WriteFile("Addison.Wesley.Domain.Driven.Design.pdf");
}
相关文章推荐
- ScriptManager和UpdatePanel控件联合局部刷新
- UpdatePanel控件中使用GridView时,RowCommand事件执行删除后,GridView不刷新问题。
- UpdatePanel控件的使用(实现局部刷新,ajax)
- 局部刷新 与 点击按钮弹出窗口 (ajax 控件 updatepanel ModalPopupExtender ) 今天怎么老出问题呢
- ScriptManager和UpdatePanel控件的使用(UpdatePanel局部刷新)
- UpdatePanel控件的使用(实现局部刷新,ajax)
- 在webpart中使用updatepanel控件,并在sharepoint中实现ajax局部刷新
- UpdatePanel控件的使用(实现局部刷新,ajax)
- HttpContext是干什么的; asp.net 获取网站路径;DataSet读取xml文件;updatepanel 控件的局部刷新 always和condition
- 在SharePoint 2013 中使用UpdatePanel控件进行局部刷新
- HttpContext是干什么的; asp.net 获取网站路径;DataSet读取xml文件;updatepanel 控件的局部刷新 always和condition
- [ASP.NET] UpdatePanel局部刷新 -- 与用户控件使用
- ScriptManager和UpdatePanel控件实现局部刷新
- UpdatePanelAnimation局部刷新动画控件
- UpdatePanel控件的使用(实现局部刷新,ajax)
- UpdatePanel控件的使用(实现局部刷新,ajax)
- UpdatePanel控件的使用和局部刷新
- UpdatePanel控件 局部刷新
- ASP之利用updatepanel和Timer实现局部定时刷新
- 多个UpdatePanel控件相互引发刷新的使用