跨页的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 9:          string strUserName = PreviousPage.pp_TextBox1.Text;
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

相关文章推荐

Posting Key and Field Status Variant

  • 2015年01月22日 10:02
  • 617KB
  • 下载

Validating the Document Types in MIRO and MIR7 While Posting the Entry

Validating the Document Types in MIRO and MIR7 While Posting the Entry

发布和发送消息(Posting and Sending Messages)

发布和发送消息(Posting and Sending Messages)        任何应用程序都可以发布和发送消息。像系统一样,应用程序通过复制消息到消息队列来发布消息,通过把消息作为参数传...

SAP中过账码or记账码&posting code

SAP中过账码和记账码是指同一个事物。 在实际业务中,记账码就是只有“借”和“贷”, 而SAP中Posting Code肩负着更多的任务:   1)界定科目类型,   2)借贷...

BAPI_ACC_GL_POSTING_POST生成财务预制凭证

利用此BAPI生成预制凭证,首先要在如下用户出口做一个简单增强: ACBAPI01 会计核算: 对 BAPI 界面的客户增强功能 对应的出口函数是:EXIT_SAPLACC4_001 相应的代码...

mycat 分页慢原理解析、mycat跨事务解惑、mycat注解调用存储过程分析

1结合Mycat日志,分析select * from travelrecord order by id limit100000,100 的执行过程,解释下当limit M,N中的M非常大的情况下,为什...
  • mchdba
  • mchdba
  • 2016年02月22日 21:17
  • 6280

透明层 解析 跨浏览器实现

  • 2009年03月30日 10:59
  • 1KB
  • 下载

Hadoop源码解析之: TextInputFormat如何处理跨split的行

最常见的FormatInput就是TextInputFormat,在split的读取方面,它是将给到的Split按行读取,以行首字节在文件中的偏移做key,以行数据做value传给map函数处理,这部...

AJAX的阻塞及跨域名解析

  • 2014年04月14日 14:56
  • 16KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跨页的Posting解析
举报原因:
原因补充:

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