现在的位置: 首页 > 综合 > 正文

跨页的Posting解析

2012年01月31日 ⁄ 综合 ⁄ 共 3409字 ⁄ 字号 评论关闭

关于本身页面的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

【上篇】
【下篇】

抱歉!评论已关闭.