C# 创建新页面作为控件并显示在弹出窗口中

C# 创建新页面作为控件并显示在弹出窗口中,c#,asp.net,C#,Asp.net,基本上,我想做的是: protected void Imgexport_Click(object sender, System.Web.UI.ImageClickEventArgs e) { //get the download page as an object (requires complex parameter) GenericExcelDownloader Ged = new GenericExcelDownloader(gvEquipmentRuntime, "Pro

基本上,我想做的是:

protected void Imgexport_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
    //get the download page as an object (requires complex parameter)
    GenericExcelDownloader Ged = new GenericExcelDownloader(gvEquipmentRuntime, "Projected Maintenance Report.xls");

    //get the response stream from the download page
    StringWriter sWriter = new StringWriter();

    HtmlTextWriter hTextWriter = new HtmlTextWriter(sWriter);
    Ged.RenderControl(hTextWriter);

    //????
    //Profit?
    //WHAT DO?
}
我调用的控件在页面加载期间包含代码,基本上是这样结束的:(对网格进行了其他修改,添加到下面引用为“下载”的Div中)

最终目标是,单击按钮后,另一个页面上的div(包含作为click事件中的初始参数传入的网格视图的修改版本)将下载到客户机上

我陷入困境的地方是,我不知道如何将代码中作为对象的ASPX页面放到前端。我甚至不知道我最初的尝试是否是正确的出发点。由于复杂的参数及其大小,我不想只依赖
窗口。使用字符串参数和/或会话变量打开

更新:解决方案

我找到了一种可以实现我目标的方法,尽管最初的问题实际上还没有得到回答

通过使用
Server.Execute()
我可以直接运行子页面。它还允许我访问
Page.PreviousPage
属性,这是对调用页面的对象级引用,其中包含我需要的复杂对象。然后我可以反向引用该页面,直接在子页面上获取该对象。代码看起来像这样

protected void Imgexport_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
    Server.Execute("GenericExcelDownloader.aspx?Report=Projected%20Maintenance%20Report%2Exls", true);            
}
另一边呢

ReportName = Request.QueryString["Report"];
if (PreviousPage != null && PreviousPage is iReportPage)
    ReportGrid = ((iReportPage)PreviousPage).ReportView;
这现在允许页面直接处理,并处理其响应,以便以我需要的方式下载网格

已知问题:

GridView中的数据源在回发过程中不会以任何持久方式存储,因此您必须将其保存在某个位置(Viewstate或Session),或者您必须从数据存储中再次请求它(在数据库中)

因为这个原因,在我让它工作后不久,我就把整个实验提交了。我希望避免将所有数据都存储在内存中,并避免在回发期间重新生成网格。显然这是不可能的,所以我需要以稍微更直接的方式来完成

我仍然对原始问题的答案很感兴趣,我可以想象它有多种用途

ReportName = Request.QueryString["Report"];
if (PreviousPage != null && PreviousPage is iReportPage)
    ReportGrid = ((iReportPage)PreviousPage).ReportView;