<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ASP.NET 2.0 中實現跨頁提交

      ASP.ET 1.x的時候,很多朋友可能需要進行跨頁提交的處理,也就是從頁面A能夠提交到頁面B,甚至不同的Control其目標處理頁面也各不相同。尤其是從ASP/JSP/PHP轉過來的開發人員,可能更有這種需求。但很不幸,在ASP.NET 1.x的時候,處理這種跨頁請求是十分丑陋的,需要非常多的技巧化處理。

        在ASP.NET 2.0的時候,對于跨頁提交已經有了非常合理的解決方案,以下就是一個示例。

        SourcePage.aspx: 請注意Button1PostBackUrl屬性設置

      <%@ 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">
          public string YourName
          {
              get
             {
                  return this.TextBox1.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="Label1" runat="server" Text="
      請輸入您的姓名" Width="183px"></asp:Label>
              <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
              <asp:Button ID="Button1" runat="server"  Text="
      提交
      " PostBackUrl="~/TargetPage.aspx" /></div>
          </form>
      </body>
      </html>
        TargetPage.aspx:請注意PreviousPageType的屬性設置


      <--<BR>
      Code highlighting produced by Actipro CodeHighlighter (freeware)
      http://www.CodeHighlighter.com/

      -->

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

      <%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %>
      <!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)
         {
              this.Label1.Text = PreviousPage.YourName;
          }
      </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="Label1" runat="server" ></asp:Label>
          
          </div>
          </form>
      </body>
      </html>


        OK,就通過這么簡單的兩個屬性設置,就可以非常方便的得到跨頁提交的特性。

      讀取源頁面的信息

        ASP.NET 2.0中,Button控件有個新增的屬性PostBackUrl,用來設置需要提交的目標頁面。因為只要指定Button控件的PostBackUrl屬性就可以提交到其它頁面,我們可以在頁面中使用多個控件配置其PostBackUrl的屬性,提交到不同的頁面。當然也可配置多個頁面提交到同一個頁面。

        在跨頁面提交之后,通常我們需要從源頁面中讀取控件的信息(即由瀏覽器發送的信息),以及源頁面的公共屬性。

        讀取控件的值

        ASP.NET 2.0Page類新增了一個PreviousPage屬性。顧名思義,目標頁面中的這個屬性包含對源頁面的引用。這樣就可以在目標頁面中通過PreviousPage屬性訪問源頁面的信息,我們一般使用FindControl方法來查找源頁面上的控件并讀取這些控件的值。下面的代碼說明了該方法的使用:

      if (Page.PreviousPage != null)
      {
       TextBox txtName = (TextBox)Page.PreviousPage.FindControl("txtName");
       
      if (txtName != null)
       
      {
        
      Label1.Text = txtName.Text;
       
      }
      }


        當我們想查找源頁面中控件屬于另一個控件或者是模板之中,就不能直接使用FindControl方法來讀取它,而是應該先獲取對該容器的引用,然后才能在該容器中查找要獲取的控件。下面的例子中,FirstPage.aspx頁面中包含一個Panel控件,其IDMainPanel,它還包含IDUserNameTextBox控件。具體代碼如下:

      Panel MainPanel = (Panel)PreviousPage.FindControl("MainPanel");
      if (MainPanel != null)
      {
       TextBox UserName = (TextBox)MainPanel.FindControl("UserName");
       
      if (UserName != null)
       
      {
        
      Label1.Text = UserName.Text;
       
      }
      }
      else
      {
       
      Label1.Text = "Cannot find UserName control.";
      }


        讀取源頁面的公共屬性

        一旦在目標頁面中獲取了PreviousPage的引用,就能訪問源頁面中公共控件的屬性,同樣也可訪問源頁面中的公共屬性。當然,我們需要預先在源頁面中公開需要被訪問的屬性方可在目標頁面中訪問。

        若要獲取源頁面的公共成員,必須先獲取對源頁面的強類型引用。就像第一個例子中,我們可以使用@PreviousPageType指令來指定源頁面,它有兩個屬性分別為:VirtualPathTypeName。使用VirtualPath屬性指定來源頁的虛擬路徑(包含文件名),也可以使用TypeName指定源頁面的屬性。注意只能指定其中的一個,兩者都指定就會失效。如第一個例子中所示:

      %@ PreviousPageType VirtualPath="~/FirstPage.aspx" %


        如果使用了@PreviousPageType指令,目標頁面中的PreviousPage 屬性被強類型化為源頁面的類。因此,可以直接引用源頁面的公共成員。要獲取對源頁面的強類型引用的另一種方法是在目標頁面中包含一個@Reference 指令,就像引用要在頁面中使用的其它任何類型一樣。在這種情況下,你可以在目標頁面中獲取目標頁面的PreviousPage屬性并將其強制轉換為源頁面的類型,如下面的代碼所示:

      SourcePage_aspx sourcePage;
      sourcePage = (SourcePage_aspx) PreviousPage;
      Label1.Text = sourcePage.UserName;


        讀取源頁面中的Form信息

        如果源頁面和目標頁面屬于同一個 ASP.NET 應用程序,則目標頁中的PreviousPage屬性包含對源頁面的引用。在沒有使用@PreviousPageType指令的情況下,目標頁面中PreviousPage 屬性類型化為Page

        注意,如果該頁不是跨頁發送的目標頁面或者目標頁面位于不同的應用程序中,則不會初始化PreviousPage屬性。

        如果源頁面和目標頁面屬于不同的應用程序,甚至是不同的網站,那就無法直接獲取源頁面上控件的值,但可以從Request.Form中讀取發送的數據。還有一個需要注意的問題,因為源頁面的視圖狀態經過Hash處理,所以不能從源頁面中讀取視圖狀態。如果要在源頁面中存儲值并讓這些值可供其他應用程序中的目標頁使用,可以將這些值作為字符串存儲在源頁面的隱藏字段中,并在目標頁面中通過 Request.Form 來訪問它們。
      判斷是否為跨頁面提交

        跨頁面提交的時候,源頁面控件的內容被提交到目標頁面,然后瀏覽器執行POST操作(注意,不是GET)。在ASP.NET 1.x中由于頁面都是自己提交給自己,可以通過PageIsPostBack屬性來判斷是否為頁面提交。但是在跨頁面提交的時候,目標頁面的IsPostBack屬性為false。如果要判斷是否為跨頁面提交,可以對目標頁面的PreviousPage屬性返回的引用頁面的IsCrossPagePostBack屬性進行判斷,如下面的代碼所示:

      if(PreviousPage != null)
      {
       if(PreviousPage.IsCrossPagePostBack == true)
       
      {
        Label1.Text = "跨頁面提交
      ";
       
      }
      }
      else
      {
       Label1.Text = "非跨頁面提交
      ";
      }


        注意,如果當前頁面不是跨頁面提交的目標頁面,則其PreviousPage屬性為空。

        跨頁面提交 VS Server.Transfer

        ASP.NET 2.0中,無論是跨頁面提交還是使用Server.Transfer操作,都可以使用Previousoage屬性來獲取對源頁面的引用。如果要區分它們,可以使用上面介紹的方法。

        下面是跨頁面提交與Server.Transfer之間的一些區別:

      屬 性

      跨頁面提交

      Server.Transfer

      IsPostBack

      false

      false

      PreviousPage

      源頁面的引用

      源頁面的引用

      PreviousPage.IsCrossPagePostBack

      true

      false

      IsCrossPagePostBack

      false

      false

      IsCallBack

      false

      false


        跨頁面提交是客戶端瀏覽器的行為,而Server.Transfer則是服務器端的行為。在后面的小節中,我們會分析跨頁面提交時客戶端瀏覽器是如何實現提交的。

        對跨頁面提交的簡單分析

        在上面的例子中,我們都提到設置ButtonPostBackUrl屬性來實現跨頁面提交。其實只要實現IButtonControl接口的控件均可以實現這一點。Button, ImageButton, LinkButton都實現了IButtonControl接口。通過實現IButtonControl,自定義控件也可以有表單中的按鈕所具有的跨頁面提交的功能。IButtonControl接口聚合了ASP.NET 1.x支持的多數按鈕控件(包括一些html按鈕控件)的一些屬性。

      讀取源頁面的信息

        ASP.NET 2.0中,Button控件有個新增的屬性PostBackUrl,用來設置需要提交的目標頁面。因為只要指定Button控件的PostBackUrl屬性就可以提交到其它頁面,我們可以在頁面中使用多個控件配置其PostBackUrl的屬性,提交到不同的頁面。當然也可配置多個頁面提交到同一個頁面。

        在跨頁面提交之后,通常我們需要從源頁面中讀取控件的信息(即由瀏覽器發送的信息),以及源頁面的公共屬性。

        讀取控件的值

        ASP.NET 2.0Page類新增了一個PreviousPage屬性。顧名思義,目標頁面中的這個屬性包含對源頁面的引用。這樣就可以在目標頁面中通過PreviousPage屬性訪問源頁面的信息,我們一般使用FindControl方法來查找源頁面上的控件并讀取這些控件的值。下面的代碼說明了該方法的使用:

      if (Page.PreviousPage != null)
      {
       TextBox txtName = (TextBox)Page.PreviousPage.FindControl("txtName");
       
      if (txtName != null)
       
      {
        
      Label1.Text = txtName.Text;
       
      }
      }

        當我們想查找源頁面中控件屬于另一個控件或者是模板之中,就不能直接使用FindControl方法來讀取它,而是應該先獲取對該容器的引用,然后才能在該容器中查找要獲取的控件。下面的例子中,FirstPage.aspx頁面中包含一個Panel控件,其IDMainPanel,它還包含IDUserNameTextBox控件。具體代碼如下:


      Panel MainPanel = (Panel)PreviousPage.FindControl("MainPanel");
      if (MainPanel != null)
      {
       TextBox UserName = (TextBox)MainPanel.FindControl("UserName");
       
      if (UserName != null)
       
      {
        
      Label1.Text = UserName.Text;
       
      }
      }
      else
      {
       
      Label1.Text = "Cannot find UserName control.";
      }

        讀取源頁面的公共屬性


        一旦在目標頁面中獲取了PreviousPage的引用,就能訪問源頁面中公共控件的屬性,同樣也可訪問源頁面中的公共屬性。當然,我們需要預先在源頁面中公開需要被訪問的屬性方可在目標頁面中訪問。

        若要獲取源頁面的公共成員,必須先獲取對源頁面的強類型引用。就像第一個例子中,我們可以使用@PreviousPageType指令來指定源頁面,它有兩個屬性分別為:VirtualPathTypeName。使用VirtualPath屬性指定來源頁的虛擬路徑(包含文件名),也可以使用TypeName指定源頁面的屬性。注意只能指定其中的一個,兩者都指定就會失效。如第一個例子中所示:

      %@ PreviousPageType VirtualPath="~/FirstPage.aspx" %

        如果使用了@PreviousPageType指令,目標頁面中的PreviousPage 屬性被強類型化為源頁面的類。因此,可以直接引用源頁面的公共成員。要獲取對源頁面的強類型引用的另一種方法是在目標頁面中包含一個@Reference 指令,就像引用要在頁面中使用的其它任何類型一樣。在這種情況下,你可以在目標頁面中獲取目標頁面的PreviousPage屬性并將其強制轉換為源頁面的類型,如下面的代碼所示:


      SourcePage_aspx sourcePage;
      sourcePage = (SourcePage_aspx) PreviousPage;
      Label1.Text = sourcePage.UserName;

        讀取源頁面中的Form信息

        如果源頁面和目標頁面屬于同一個 ASP.NET 應用程序,則目標頁中的PreviousPage屬性包含對源頁面的引用。在沒有使用@PreviousPageType指令的情況下,目標頁面中PreviousPage 屬性類型化為Page

        注意,如果該頁不是跨頁發送的目標頁面或者目標頁面位于不同的應用程序中,則不會初始化PreviousPage屬性。

        如果源頁面和目標頁面屬于不同的應用程序,甚至是不同的網站,那就無法直接獲取源頁面上控件的值,但可以從Request.Form中讀取發送的數據。還有一個需要注意的問題,因為源頁面的視圖狀態經過Hash處理,所以不能從源頁面中讀取視圖狀態。如果要在源頁面中存儲值并讓這些值可供其他應用程序中的目標頁使用,可以將這些值作為字符串存儲在源頁面的隱藏字段中,并在目標頁面中通過 Request.Form 來訪問它們。

      posted @ 2006-12-14 10:25  chinaifne  閱讀(709)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 农村老熟妇乱子伦视频| 成人午夜大片免费看爽爽爽| 女同精品女同系列在线观看| 九九热在线视频精品免费| 亚洲av永久无码精品水牛影视| 亚洲欧洲精品一区二区| 亚洲人成电影在线播放| 2021亚洲国产精品无码| 2018天天拍拍天天爽视频| 久久99精品久久久久久| 亚洲综合久久国产一区二区| 午夜爽爽爽男女免费观看影院 | 精品视频不卡免费观看| 国产亚洲精品自在久久vr| 国内少妇偷人精品免费| 国产成人av综合色| 精品无码久久久久国产动漫3d| 无遮无挡爽爽免费视频| 国产一区二区三四区| 欧美人与动牲交a免费| 91精品国产一二三产区| 乱中年女人伦av三区| 老司机精品成人无码AV| 国产精品永久免费成人av | 天堂网www在线资源网| 精品人妻中文字幕有码在线| 四虎影视一区二区精品| 欧美激情肉欲高潮视频| 色道久久综合亚洲精品蜜桃| 精选国产av精选一区二区三区| www插插插无码视频网站| 国产一区二区在线激情往| 国产另类ts人妖一区二区| 色哟哟网站在线观看| 亚洲av色精品一区二区| 亚洲av成人在线一区| 亚洲无av码一区二区三区| 久久国产精品99久久蜜臀| 亚洲国产美女精品久久久| 日本边添边摸边做边爱的网站| 国产熟女老阿姨毛片看爽爽|