如何在.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;
完.