1. 如果是单个
页面 A.
aspx 传递参数 到页面 B.aspx,
可以通过设置A中的postBackUrl="~/B.aspx",或者使用 Server.Transfer("~/B.aspx")。在目标页面 B.aspx 中,通过
PreviousPageType VirtualPath="~/A.aspx" 的强类指定源页面 A.aspx。这样,可以在B.aspx中通过 F
indControl() 来获得A.aspx中的控件;或者,在A.aspx中把控件
定义为公共属性,这样,在B.aspx中可以直接按 A.property 的方式
访问2. 当多个页面 A1.aspx, A2.aspx,..., An.aspx 同时要传递参数到页面 B.aspx 时,同样
我们可以使用 postBackUrl或者Server.Transfer()机制
建立联系。但是这个时候,由于A1,A2,...,An可能是不同类型的页面,故无法直接使用
PreviousPageType VirtualPath 的强类指定,而且,在.aspx 中
关键字 PreviousPageType 也只能出现
一次。这个时候的
解决办法是,在B.aspx中不使用关键字
PreviousPageType,而在B.aspx.cs中通过如下代码来判定是哪个源页面是PreviousPage:
if (Page.PreviousPage.
AppRelativeVirtualPath == "~/A1.aspx")
{
Label lblA1= (Label)Page.PreviousPage.FindControl("lblA1");
...
}
else if(Page.PreviousPage.AppRelativeVirtualPath == "~/A2.aspx")
{
...
}
else if ...
{
...
}
这里同样使用 FindControl() 来获得源页面的控件引用。直接通过属性访问的方式应该也可以,我没有再测试
3. 网上提到过一种
方法,就是使用Interface来解决,有
兴趣的可以
研究研究:
http://pluralsight.com/blogs/fritz/archive/2005/10/14/15566.aspx我是试了半天,没有
成功,就放弃了。
4. 顺便说一下 FindControl()
最常见也最让人头疼的就是 "
Object reference not set to an instance of an object" 错误了。因为FindControl()需要从上往下逐级才能找到目标控件,
特别是使用了master page的时候就更加麻烦。这个时候,需要使用如下的访问形式:
Label lblA1= (Label)Page.PreviousPage.FindControl("ctl00$ContentPlaceHolder1$lblA1");