多个页面向同一目标页面PostBack的问题

本文介绍ASP.NET中从多个源页面(A1.aspx, A2.aspx等)向目标页面(B.aspx)传递参数的方法,包括使用PostBackUrl和Server.Transfer机制,并提供通过Page.PreviousPage判断来源页面的具体实现。

折腾了一段时间,对这个问题做个简单总结:

1. 如果是单个页面 A.aspx  传递参数 到页面 B.aspx,可以通过设置A中的postBackUrl="~/B.aspx",或者使用 Server.Transfer("~/B.aspx")。在目标页面 B.aspx 中,通过 PreviousPageType VirtualPath="~/A.aspx" 的强类指定源页面 A.aspx。这样,可以在B.aspx中通过 FindControl() 来获得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");

在前面的文章讲popUp window的时候,也提高过类似的问题。

转载于:https://www.cnblogs.com/BoKeRen/archive/2006/03/29/362165.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值