程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#:總結頁面傳值幾種方法

C#:總結頁面傳值幾種方法

編輯:C#入門知識

小知識點:

1. W7自帶 .NetFrameWork 3.5, 兼容模式為 高版本兼容低版本;

2. WF和WPF都是基於XAML的,但是兩者的用途不同。

WF是一種開發框架,將工作流嵌入在.NET Framework應用程序中,所主要用於開發創建工作流應用程序。WF:http://msdn.microsoft.com/zh-cn/library/ms734696.aspx

WPF是一種渲染UI的技術是一個用於Windows平台的全新的圖形顯示系統,它包含在.NET Framework中,使用戶能夠生成融入了.NET Framework類庫的元素的桌面應用程序。WPF:http://msdn.microsoft.com/zh-cn/library/ms742119(v=vs.100)



1. 使用QueryString

Response.Redirect(url);

Request.QueryString[""];


2.使用Session變量

在頁面裡添加必要的控件創建可以返回表單的按鈕和鏈接按鈕在按鈕或鏈接按鈕的單擊事件裡,把控件的值添加到session變量裡使用Response.Redirect(或Server.Transfer)方法重定向到另一個頁面在另一個頁面提取session的值,在確定不需要使用該session時,要顯式清除它

Session["name"]=TextBox.Text;
Server.Transfer("WebForm2.aspx");

Label2.Text=Session["name"].ToString();
Session.Remove("name");


3.使用Server.Transfer

在頁面裡添加必要的控件創建返回值的Get屬性過程創建可以返回表單的按鈕和鏈接按鈕在按鈕單擊事件處理程序中調用Server.Transfer方法轉移到指定的頁面在第二個頁面中,我們就可以使用Context.Handler屬性來獲得前一個頁面實例對象的引用,通過它,就可以使用存取前一個頁面的控件的值了

示例1:

get
{
return TextBox1.Text;
}

private void Button1_Click(object sender,System.EventArgs e)
{
Server.Transfer("WebForm2.aspx");
}

在WebForm2.aspx中務必在第一句話添加<%@ Reference Page="~/WebForm1.aspx" %>或<%@ PreviousPageType VirtualPath="~/WebForm1.aspx" %>
然後在WebForm2.aspx.cs中添加
WebForm1 wf1;
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.Name;
示例2:

 這個才可以說是 面象對象開發所使用的方法,其使用Server.Transfer方法把流程從當前頁面引導到另一個頁面中,新的頁面使用前一個頁面的應答流,所以這個方 法是完全面象對象的,簡潔有效。下面這個代碼是展示在需要很多個參數的時候,使用的方法,如果參數比較少就沒必要使用這個方法了.
如果讓所有的查詢頁面都繼承一個接口,在該接口中定義一個方法,該方法的唯一作用就是讓結果頁面獲得構建結果時所需的參數,就可實現多頁面共享一個結果頁面操作!

1、先定義一個類,用該類放置所有查詢參數:

\
\///
\/// QueryParams 的摘要說明
\/// <喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vc3VtbWFyeT48YnI+CjxpbWcgc3JjPQ=="https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017012018521544.gif" align="top" alt="\">public class QueryParams
\{
\ private string firstName;
\ private string lastname;
\ private int age;
\
\
\ public string Firstname
\ {
\ get { return this.firstname; }
\ set { this.firstname = value; }
\ }
\ public string LastName
\ {
\ get { return this.lastname; }
\ set { this.lastname = value; }
\ }
\ public string Age
\ {
\ get { return this.age; }
\ set { this.age = value; }
\ }
\
\}
\
\


2、接口定義:

\
\///
\ /// 定義查詢接口。
\ ///

\ public interface IQueryParams
\ {
\ ///
\ /// 參數
\ ///

\ QueryParams Parameters { get;}
\ }
\


3、查詢頁面繼承IQueryParams接口(QueryPage.aspx):
QueryPage.aspx

\
\
\


QueryPage.aspx.cs

\
\public partial class QueryPage : System.Web.UI.Page, IQueryParams
\{
\ private QueryParams queryParams;
\
\ public QueryParams Parameters
\ {
\ get
\ {
\ return queryParams;
\ }
\ }
\
\ public void btnEnter_Click(object sender, System.EventArgs e)
\ {
\ //賦值
\ queryParams = new QueryParams();
\ queryParams.FirstnName = this.txtFirstName.Text;
\ queryParams.Lastname = this.txtLastName.Text;
\ queryParams.Age = this.txtAge.Text;
\ Server.Transfer( "ResultPage.aspx ");
\ }
\
\ protected void Page_Load(object sender, EventArgs e)
\ { }
\}

\4、接收頁面(ResultPage.aspx):
\ResultPage.aspx.cs
\public partial class ResultPage : System.Web.UI.Page
\{
\ protected void Page_Load(object sender, EventArgs e)
\ {
\ QueryParams queryParams = new QueryParams();
\ IQueryParams queryInterface;
\ //實現該接口的頁面
\ if (Context.Handler is IQueryParams)
\ {
\ queryInterface = (IQueryParams)Context.Handler;
\ queryParams = queryInterface.Parameters;
\ }
\
\ Response.Write("FirstName: ");
\ Response.Write(queryParams.FirstName);
\ Response.Write("
Lastname: ");
\ Response.Write(queryParams.LastName);
\ Response.Write("
Age: ");
\ Response.Write(queryParams.Age);
\
\ }
\}

4.利用某些控件的PostBackUrl屬性

示例:仍然是源頁面WebForm1.aspx和目標頁面WebForm2.aspx.

WebForm1.aspx中的部分代碼:

WebForm2.aspx.cs中的部分代碼:

protected void Page_Load(objectSender,System.EventArgs e)

{

TextBoxtxtName;

Calendarcalendar1;

txtName=(TextBox)PreviousPage.FindControl("txtName");

calendar1=(Calendar)PreviousPage.FindControl("Calendar1");

Label.Text="Hello,"+txtName.Text+calendar1.SelectedDate.ToShortDateString();

}

使用這種方法存在一個問題:如果在沒有單擊那個按鈕之前,也就是未處理WebForm1.aspx之前,有人請求了WebForm2.aspx,該怎麼辦?這就需要在WebForm2.aspx中的代碼處理之前加一個判斷.使用IsCrossPagePostBack屬性,這與IsPostBack 屬性很相似,它允許檢查請求是否來自WebForm1.aspx.如下:

protected void Page_Load(objectSender,System.EventArgs e)

{

if(PreviousPage.IsCrossPagePostBack)

{

TextBox txtName;

Calendar calendar1;

txtName=(TextBox)PreviousPage.FindControl("txtName");

calendar1=(Calendar)PreviousPage.FindControl("Calendar1");

Label.Text="Hello,"+txtName.Text+calendar1.SelectedDate.ToShortDateString();

}

else

{

Response.Redirect("WebForm1.aspx");

}

}


5.使用@PreviousPageType指令

TypeName:設置回送時的派生類名

VirtualPath:設置回送時所傳送頁面的地址.

WebForm1.aspx

get{returnthis.txtName;}//返回一個控件對象


<%@ PreviousPageTypeVirtualPath="~/Page1.aspx"%>,

然後就能引用WebForm1.aspx中定義的屬性了.

在WebForm2.aspx.cs中可以有如下引用形式(假設WebForm2.aspx中有一個ID為lblName的Label):

lblName.Text="Hello"+PreviousPage.Name.Text+"
";


6. 使用Cookie對象變量

與Session一樣,是對每一個用戶而言的,但是有個本質的區別,即Cookie是存放在客戶端的,而session是存放在服務器端的。而且Cookie的使用要配合ASP.NET內置對象Request來使用

設置Cookie: HttpCookie cookie_name = new HttpCookie("name");
cookie_name.Value = Label1.Text;
Reponse.AppendCookie(cookie_name);

獲取Cookie:
string name= Request.Cookie["name"].Value.ToString();

7. 使用Application 對象變量

Application對象的作用范圍是整個全局,也就是說對所有用戶都有效。其常用的方法用Lock和UnLock。

Application["name"] = Label1.Text;
Server.Transfer("b.aspx");

string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved