2015-12-14 23 views
1

我的項目有一個像
看不到價值另一類ASP.net

  • Project_ASP
    • 客戶(文件夾)
    • Info.aspx
  • 結構Login.aspx

的Login.aspx

//oracle_connection' 
pasrsing data from Oracle 
private string ResultPassport = string.Empty; 

public string PassportResult 
{ 
    get 
    { 
     return ResultPassport; 
    } 
    set 
    { 
     ResultPassport = value; 
    } 
} 
Login obj = new Login(); 
obj.PassportResult = dr.GetString(0); 

Info.aspx

protected void Page_Load(object sender, EventArgs e) 
{ 
    Login obj = new Login(); 
    TextBox3.Text = obj.PassportResult;  
} 

的問題是,我不能看到Info.aspx

凡結果我的錯?

+0

您不顯示'Login'構造函數,所以我們無法幫助修復該代碼。但總的來說,兩個頁面並不存在於彼此之下,只有一個。將呈現的HTML發送給客戶端時,頁面及其所有對象(包括控件)將被置於頁面生命週期的末尾。 –

+0

@TimSchmelter我在Login.aspx中沒有任何構造函數。我在Login.aspx中獲得了所有需要的數據,但我想發送給Info.aspx的一串數據 – Kapi1256

回答

3

你爲什麼期望?

你正在創建一個新的Login對象:

Login obj = new Login(); 

然後你新的對象上訪問屬性:

obj.PassportResult 

那是什麼?:財產

private string ResultPassport = string.Empty; 
public string PassportResult 
{ 
    get 
    { 
     return ResultPassport; 
    } 
    set 
    { 
     ResultPassport = value; 
    } 
} 

該值默認爲string.Empty。正如預期的那樣,你得到了string.Empty

(旁註:該屬性的命名和支持變量只是乞討對這些天StackOverflowException一個你可能想選擇更加清晰的名字來區分變量屬性。)

你沒有設置以前對象的值:

Login obj = new Login(); 
obj.PassportResult = dr.GetString(0); 

但是,這是不是同一個對象。如果您想從該對象獲取該值,則需要訪問那個對象。除非值爲static(其中可能是不是您想要在Web應用程序中執行的操作),否則您需要維護對同一實例的引用或在某處持久保存並檢索它。

這與ASP.NET無關。這簡直就是C#(以及任何語言)的工作原理。在一個對象上設置值不會影響其他對象。

有許多選項可以將該對象的狀態從一個頁面傳遞到另一個頁面。可能最直接的方法就是使用會話狀態。事情是這樣的:

Login obj = new Login(); 
obj.PassportResult = dr.GetString(0); 
Session["PassportResult"] = obj; 

然後在以後的頁面:

Login obj = (Login)Session["PassportResult"]; 

這有一些缺點,特別是當它涉及到的可擴展性。當然,您還需要進行一些錯誤檢查以確保該對象在嘗試檢索並投射之前存在。但在大多數情況下,這應該完成工作。

什麼是真的這裏混淆的是爲什麼你要創建Page對象的實例並在其上設置值。如果你退後一分鐘,描述你實際想要完成的事情的本質,那麼可能有一種更簡單的方法來實現它。例如,將值傳遞給URL或表單元素將非常簡單,並且可以更有效地擴展,如果它只是一個字符串值。 (雖然缺點是用戶可以編輯它,所以這可能是一個問題。)

+0

我得到了「無法投射'System.String'類型的對象來鍵入」 登錄obj2 =(Login)Session [「PassportResult」];在Info.aspx – Kapi1256

+0

@ Kapi1256:你在會話對象中存儲了什麼?它是一個'Login'對象還是一個'String'對象?如果你只是想轉移這個值,那麼你可能應該完全跳過使用'Login'對象,並且只是從Session存儲/檢索該字符串值。 – David

1

事情並不像那樣工作。首先,在Info.aspx中,創建另一個對象Login,這意味着它是您的堆內存中的新對象,並且您的字段爲空。要通過頁面之間的信息,您可以使用:

  • 會議(糟糕的做法)
  • 餅乾
  • 查詢字符串
  • 從數據庫

獲取或者您可以使用PreviousPage財產,像這樣:

if (PreviousPage != null) 
{ 
    TextBox SourceTextBox = 
     (TextBox) PreviousPage.FindControl("TextBox1"); 
    if (SourceTextBox != null) 
    { 
     Label1.Text = SourceTextBox.Text; 
    } 
} 
+0

只有在「Login」實際上是上一頁並且[Server.Transfer]]時,'PreviousPage'方法才起作用(https://msdn.microsoft.com/en-us/library/8z9e2zxx(v=vs.110).aspx)被用於重定向到此頁面。 –