如何在.net里实现把独立FrameSet里的Forms参数传递给另一个FrameSet里的.aspx文件。
首先申明这个文章将要用到两个FramSet:
A FrameSet:Serach Forms B FrameSet:DataList Forms
一般我们在.net开发的时候都是在同一个文件的来写代码的,也就是后代码方式,不过,在.net的开发过程中,由于为了方便界面查询,以及 整体的FrameSet效果有时候不幸将查询的Form写在了一个单独的.aspx文件里,查询的结果放在了另一个FrameSet里的.aspx文件里, 这个显示查询结果的的.aspx文件包含一个.ascx用户控件。
由于.net开发有别于传统的asp开发,如何在.net里实现把独立FrameSet里的Forms参数传递给另一个FrameSet里的.aspx文件。
在这里。我使用Page.Server.Transfer来实现
首先需要指定A FrameSet:Serach Forms的target=B Frame Name,可以编程的方式设置this.Forms.target=。。。
然后在B FrameSet:DataList Forms
注意我这里的这个B FrameSet:DataList Forms可以同时接受Get和Form访问的参数访问 但是请注意。由于在A FrameSet:Serach Forms里用到了Page.Server.Transfer
A FrameSet:Serach Forms 部分代码:
string msgStatus=drpStatus.Items[drpStatus.SelectedIndex].Value; string tempURLParam="/B FrameSet/DataList Forms/Search.aspx?statusCode="+msgStatus; Page.Server.Transfer(tempURLParam);
所以在B FrameSet:DataList Forms里需要向下面这样来写,不然你接受不到Page.Server.Transfer(tempURLParam)过来的参数。 最重要的是当用Transfer过来时,你一定认为此时应该用Request.Form来接受表单参数, 那你就会发现。我永远也接受不到A Forms的值。 虽然通过跟踪,可以发现此时Request.ServerVariables["REQUEST_METHOD"]确实等于POST,但是你不能想到用Form方式来取A FrameSet:Serach Forms的值,是取不到的。
所以我们在Transfer(tempURLParam)里带上A Forms选择的参数。如下传递: string msgStatus=drpStatus.Items[drpStatus.SelectedIndex].Value; string tempURLParam="/B FrameSet/DataList Forms/Search.aspx?statusCode="+msgStatus; Page.Server.Transfer(tempURLParam);
这样就把A FrameSet:Serach Forms里的表单参数传递过去了,看看前面我门为什么在这里不用Request.Form而用Request.QueryString的原因
下面是B FrameSet:DataList Forms 接受A FrameSet:Serach Forms的部分代码:
if(Request.ServerVariables["REQUEST_METHOD"].ToString().ToUpper()=="GET") {
Response.Write("<Script>"); Response.Write("alert('"+Request.ServerVariables["REQUEST_METHOD"].ToString()+"')"); Response.Write("</Script>");
if ( Request.QueryString["statusCode"] == null ) { statusCode_Param = "All"; } else { statusCode_Param = Request.QueryString["statusCode"].ToString();
}
} else { //注意必须写成querystring的形式 if ( Request.QueryString["statusCode"] == null ) { statusCode_Param = "All"; } else { statusCode_Param = Request.QueryString["statusCode"].ToString();
}
}
}
//再传给另一个.ascx,我用的是ascx. mySearchSMS_Adv.MsgStatus = statusCode_Param;
完.

|