跨页的Posting解析

原创 2006年06月08日 14:41:00

关于本身页面的PostBack还是很简单就在控件的属性里面把AutoPostBack=true就可以了,当然由于效率问题还是少用哦.呵呵.不然一选某个就刷新一个页面简直就是考验用户的信心.

关于页面同页面之间值的传递可以参考我的server.transfer小用法 .下面开始讲一下跨页面之间如何判断是前一个页面相互之间的Posting.同传递值有点区别哦.

Crsoss-Page Posting

在ASP.NET 2.0中我们判断页面是否PostBack使用

if(!Page.IsPostBack){

}

例子我们从一个Page1.aspx 传递值给 Page.aspx

Page1.aspx代码如下

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

    protected void btn1_Click(object sender, EventArgs e)
    {
        Label1.Text = " Hi" + TextBox1.Text + "<br/>" + "你住在:" + TextBox2.Text;
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div >
    <b>姓名</b>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <b>地址</b>
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
   
    <asp:Button ID="btn1" runat="server" Text="提交给本身Page1.aspx" OnClick="btn1_Click" />
    <asp:Button ID="btn2" runat="server" Text="提交给跨页面Page2.aspx" PostBackUrl="~/Page2.aspx"/>
   
        <br />
        <br />
        <br />
    <p>
    <asp:Label ID="Label1" runat="server"></asp:Label>
    </p>
    </div>
    </form>
</body>
</html>

 

Page1.aspx代码生长两个按钮,一个按钮PostBack给自己,另外一个Post到Page2.aspx页面.所以我们在Page2.aspx里面要设置相关的代码来接受来自第一个页面的PostBack
Page2.aspx  代码如下

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    protected void Page_Load(Object sender, EventArgs e)
    {
        TextBox pp_TextBox1;
        TextBox pp_TextBox2;
        pp_TextBox1 = (TextBox)PreviousPage.FindControl("TextBox1");
        pp_TextBox2 = (TextBox)PreviousPage.FindControl("TextBox2");

        lbPage2.Text = "Your Name is :" + pp_TextBox1.Text + "<br/>地址是: " + pp_TextBox2.Text;
       
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Label ID="lbPage2" runat="server"></asp:Label>
    </div>
    </form>
</body>
</html>

 上面代码我标出红色的就是最为主要的部分,也就是采用了PreviousPage的FindControl,其中填入的就是Page1.aspx里面两个Textbox的ID,一个为TextBox1一个是TextBox2.然后定义一个两个TextboxLAI接受然后显示到label里面.相当简单.

 

Cross PostBack

写到有两个page,Post从Page1.aspx 到达Page2.aspx. 那么上面的代码如果访问时候我直接访问Page2.aspx.会出现什么状况? 会出现以下的情况.毕竟你无法从Page1.aspx得到相关的property.

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

Line 7:      protected void Page_Load(Object sender, EventArgs e)
Line 8:      {
Line 10:         string strAddress = PreviousPage.pp_TextBox2.Text;
Line 11:         lbPage2.Text = "Hi " + strUserName + " Now your address is : " + strAddress;

怎么来防止这样的事情??很简单的在asp.net 2.0里面有一个IsCrossPostBack. IsCrossPostBack检查你的请求是否来自于第一个页面.好的.我们现在修改Page2.aspx.

下面是修改后的Page2.aspx

<script runat="server">
    protected void Page_Load(Object sender, EventArgs e)
    {
        if (IsCrossPagePostBack == true)
        {
            string strUserName = PreviousPage.pp_TextBox1.Text;
            string strAddress = PreviousPage.pp_TextBox2.Text;
            lbPage2.Text = "Hi " + strUserName + " Now your address is : " + strAddress;
        }

        else
        {
            Response.Redirect("Page1.aspx");
        }
       
    }
</script>

也就是如果是来自前一个页面的Post那么显示内容,如果不是就跳转到Page1.aspx

SESSION跨页传递问题

首先,我们要了解,在什么状态下SESSION中的会话变量不能跨页传递。情况有三:①客户端禁用了COOKIE;②在php.ini中设置了session.use_trans_sid=0或者在编译前没有开启...
  • fff058
  • fff058
  • 2016年01月17日 19:45
  • 765

Latex:跨页多图

文中如果出现需跨页的多子图的情况。 要处理这一情况需,使用subfigure和 \addtocounter{figure}{-1} \begin{figure} \subfigure{..} \en...
  • LaineGates
  • LaineGates
  • 2017年02月10日 16:05
  • 1480

复选框的跨页勾选

//选中的复选框,加入session中 function getCheckedVal() {     var obj = document.getElementsByName("box");     ...
  • Rynell
  • Rynell
  • 2018年01月17日 22:58
  • 39

SESSION无法跨页传递问题

问题来源 : 很早就搭建了个Lnmp环境,想把之前在Windows上开发的PHP项目迁移到Linux上,结果发现无法登陆,检查了下PHP连接Mysql是没有问题的,往下走,发现是SESSION无法跨页...
  • u014646984
  • u014646984
  • 2015年04月03日 23:00
  • 2036

Posting only possible in periods 2011/01 and 2010/12 in company code 1000

今天在做PP练习时,需要在库存中增加一些物料的库存数量,我用MB1C,Movement Type为561,系统提示:Posting only possible in periods 2011/01 a...
  • yika0101
  • yika0101
  • 2011年02月11日 16:01
  • 2909

今天发现listings包的跨页问题(2014-3-26)

这是我以前写的,没建立CSDN blog之前。【日期:2014-3-26】今天,需要在LaTex文档中突出显示的XML代码,于是就在网上搜索解决方案。发现编译出错,错误信息为: Incomplet...
  • RobertChenGuangzhi
  • RobertChenGuangzhi
  • 2016年01月07日 10:02
  • 778

easyui datagrid 跨页抉择

easyui datagrid 跨页选择        项目中遇到跨页选择(项目使用easyui):有多页数据,在当前页面选择后,下一页继续选择,返回之前页面时,仍然能记住之前选中的行。最后对多页选...
  • shan1774965666
  • shan1774965666
  • 2015年10月26日 18:24
  • 1282

php中session不能跨页传输的解决方案

在PHP中使用过SESSION的朋友可能会碰到这么一个问题,SESSION变量不能跨页传递。这令我苦恼了好些日子,最终通过查资料思考并解决了这个问题。我认为,出现这个问题的原因有以下几点: 1、...
  • sayigood
  • sayigood
  • 2009年11月22日 08:59
  • 3453

EEPROM读写(可自动跨页,解决“上卷”)

EEPROM读写(可自动跨页,解决“上卷”现象)
  • u011961427
  • u011961427
  • 2017年02月14日 15:10
  • 906

跨网页公布(Cross-Page Posting)

跨网页公布(Cross-Page Posting)    跨网页公布时.Net2.0的新机制,这个机制可以让您在设计网页导航程序的时候获取更大 的弹性,不但功能更为丰富,且使用也十分容易,有别于传统的...
  • ldl22847
  • ldl22847
  • 2009年12月06日 22:39
  • 1061
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跨页的Posting解析
举报原因:
原因补充:

(最多只允许输入30个字)