2011-05-25 47 views
0

我在C#的美妙世界中是相當新的,我不知道如何應對這樣的問題。C#類之間的值傳遞

我對Visual Studio 2008的一個.NET網站,我有一個主頁,main.aspx(及其以下main.aspx.cs)和遊戲頁面,game.aspx(也game.aspx.cs)。

在主要類main.aspx.cs我有一個靜態變量,private static string _username;和它,一個名爲getUsername的方法,只是返回這個值。

現在在我的遊戲類中(game.aspx.cs)我有一個事件處理程序,saveButton_Click(),在這個函數中我需要_username的值!

如果有幫助,用戶在主頁面上啓動,然後登錄...如果登錄有效,然後用戶單擊鏈接轉至game.aspx頁面,則保存變量_username

我看着到內部的關鍵字,但我不知道如何在這個特殊的例子使用它,或者即使是在這個例子中做正確的事!

+0

,您的靜態變量將網頁上的所有用戶共享......每個用戶將被保存到/從變量...你可能想使用會話來代替。 – davidsleeps 2011-05-25 01:38:52

回答

3

添加到您的主頁和遊戲頁面類:

protected string UserName { 
    get { 
     string retVal=string.Empty; 
     if (!string.IsNullOrEmpty(Session["UserName"])) 
      retVal=Session["Username"].ToString(); 
     return retVal; 
    } 
    set{ 
     Session["UserName"]=value; 
    } 
} 

然後從你的代碼中訪問屬性;

+0

創建一個繼承「Page」類的類(您將放置該邏輯的地方),然後讓您的實際頁面從您的自定義類繼承,不是更好嗎? – 2011-05-25 01:57:10

+0

是的,但我不確定提問者在面向對象方面的專業知識,並不想將他與基類/派生類的東西混淆。 – Dimitri 2011-05-25 01:59:04

+0

老實說總有一個更好的解決方案... – Dimitri 2011-05-25 01:59:46

4

要回答你的問題,你可以在一個單獨的類做一個公共靜態屬性。

然而,

這種模式將可怕的失敗(或更糟),當兩個人使用你的網站一次。

相反,你應該使用Session State

1

你必須使用Sessions來存儲和訪問多個頁面的值:

//To store value in session variable 
Session["UserName"] = "UserName"; 

//To access the value in the session variable 
String UserName = Session["UserName"]; 

檢查詳細ASP.NET Session State

0

恕我直言,你可以使用基於窗體的身份驗證,然後通過User.Identity.Name獲得用戶名非常簡單。

如果我沒有記錯