• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NET 2.0 读书笔记 圣殿 之 跨网页公布

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
在ASP.NET 2.0使用以下四种方式:
HyperLink
Response.Redirect()
Server.Transfer()
Cross-Page Posting

以下只说第四种,即“跨网页公布”
区别于PostBack(只是自己ReCall自己),不再需要URL中的参数QueryString

方法1:使用PreviousPage.FindControl访问来源网页A的空间属性属性。
A页面有TextBoxA,在A页面的Button上设制PostBackUrl属性,为B页面。
在B加载页面时:
    protected void Page_Load(object sender, EventArgs e)
    }
注意:这项技术只支持Button,LinkButton和ImageButton。

方法2:使用@PreviousPageType访问来源网页A中的Public属性:
还是A页面,A页面有TextBoxA,在A页面的Button上设制PostBackUrl属性,为B页面。后台代码公布属性:
public partial class Default3 : System.Web.UI.Page
}
在B页面,设置如下,从而指定来源网页:
<%@ PreviousPageType VirtualPath="~/A.aspx" %>
在B加载页面时:
    protected void Page_Load(object sender, EventArgs e)

注意:一个页面只能由一个@PreviousPageType标签。即源与目标是一一对应的。


方法3:使用@Reference,通过强类型来访问来源网页A中的Public成员。
@Reference是通过将PreviousPage转换成与目标网页相同的类型,即强类型,这就不只可以访问属性了,还可以访问字段,方法等等,只要是public的。
在目标B页面中添加
<%@ Reference VirtualPath="~/A.aspx" %>
那么在B中,就可以访问A这个页面类——基于文件系统的WebSite,其下的类是没有命名空间的,所以不能相互访问。
假设源页面A是这样的:

public partial class Default5 : System.Web.UI.Page
}

那么,在B加载页面时,

    protected void Page_Load(object sender, EventArgs e)
    }

说到这里,我自己试了一下,其实@PreviousPageType也可看作是强类型的,使用同方法三,只是相应在目标页面添加@PreviousPageType标签。。同时,我发现,只有添加了@PreviousPageType或@Reference后,目标页面类才能动态发现源目标类。

再者,@PreviousPageType和@Reference的真正区别在于,一个页面只能由一个@PreviousPageType标签;但是一个页面却可以同时有多个@Reference,但这时候就需要额外的判断来源以决定相应的处理方法了,见下:
假设目标页面B添加两个@Reference:

<%@ Reference VirtualPath="~/Default5.aspx" %>
<%@ Reference VirtualPath="~/Default3.aspx" %>

B相应的加载过程:

   protected void Page_Load(object sender, EventArgs e)
    }

当然,也可以使用反射,从而写得不这么麻烦。
还有PreviousPage的IsCrossPagePostBack属性,判断页面是否来自“跨网页公布”。(异曲同工于IsPostBack)

“跨网页公布”原理:
1.用户在源页面A按下Button后,根据其PostBackUrl属性,导向目标页面B
2.B页面将A页面的ViewState另外存储一份后,销毁A页面的ViewState
3.当在B页面中使用PreviousPage时,系统会自动初始化与A页面同一类型的Page,将其赋予PreviousPage,并在B页面Load_Complete阶段将原先保存的A页面ViewState还原给PreviousPage
4.使用PreviousPage这个与源页面A相同的实体

可以看到,“跨网页公布”的成本是很高的。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Asp.Net自动发送邮件代码发布时间:2022-07-10
下一篇:
[翻译]在asp.net 2.0中开发一个简单的评级控件发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap