2010-02-23 245 views
4

IM真正的新ASP.Net,仍然havnt了我的頭一輪大多數的概念,我真的有可變的問題,創建一個桌面應用程序,在代碼中創建例如ASP.NET變量範圍

任何變量時
int n = 10; 

這個變量將在那裏,直到程序運行正確。但在asp iv中創建的變量應該持續到用戶獲取該頁面爲止,例如說,我有一個頁面,其中包含用戶值(調用此變量n表示用戶類型爲10),並且每次用戶按下代碼的下一個按鈕將10添加到此值。所以第一次用戶按下一個按鈕

n= n + 10; 

我所發現的是,無論多少次,我按下一個按鈕,將n總是等於20,這是因爲以前的值不會被保存!

這些值在用戶第一次進入該頁面時被填充,一旦用戶點擊下一個按鈕,這些值的內容就消失了!如何能夠阻止這種情況發生?

希望這是有道理的!

謝謝

回答

4

每次刷新頁面(點擊同時刷新頁面)頁面類的新實例被創建。這意味着你的所有領域都是空的。

您可以嘗試使用ViewState在刷新之間保留數據。但你應該小心,因爲這會增加頁面大小。所以最好的做法是在視圖狀態下對數據進行最小化。

另一種選擇是SessionState,但在這種情況下,您甚至可以在頁面之間保留數據。

希望這會有所幫助。

+0

ok說我使用會話,當頁面加載所有的變量都填充正確,然後所有這些都存儲在會話權。所以例如我有這個參差不齊的數組 受保護的字符串[] [] answersJArray; 然後填充,並存儲在會話中,就像這樣 Session.Add(「answersJArray」,answersJArray); 後來在我的代碼需要通過這個交錯數組來遍歷,我使用以下代碼 對於(j = 0;Ĵ c11ada 2010-02-23 23:53:10

+0

從會話中獲得'answersJArray'並按預期工作。 Actullay yuo不需要字段'answersJArray'。 – 2010-02-24 09:31:40

2

變量在ASP.NET中不會自動維護頁面調用的狀態。 Asp.Net Page有一個生命週期並且是無狀態的,在這個週期結束後,在客戶端提交請求之後,信息就會丟失。有幾個解決方案。

這裏是hidden field例子。


在HTML中,您只需創建:

<input type="hidden" id="myHiddenVar"> 

要設置它在JavaScript值:

document.getElementById("myHiddenVar").value = "myValue" 

在ASP.NET代碼隱藏,你使用Request對象檢索價值。

string myHiddenVar = (string)Request.Params["myHiddenVar"]; 

2
每個

用戶請求的頁面時,它接收該請求,進行初始化,處理,然後再現(讀有關Asp.Net頁生命週期here.)。因此,在每個頁面請求中,您的變量正在被創建,初始化,然後分配您的值 - 每個頁面加載是一個新的生命週期。如果您希望值在頁面生命週期之間保持不變,那麼您需要使用其中一種可用方法(ViewState,Session,QueryString,Post,...)將值傳遞給「下一個」請求。

2

變量在ASP.NET工作完全在Windows窗體變量的工作方式:

public class MyPage : System.Web.UI.Page 
{ 
    private int n = 0; 

    public void Button_Click(object sender, EventArgs e) 
    { 
     n = n + 1; 
    } 
} 

public class MyForm : System.Windows.Forms.Form 
{ 
    private int n = 0; 

    public void Button_Click(object sender, EventArgs e) 
    { 
     n = n + 1; 
    } 
} 

那麼,爲什麼與頁面是吧,那的舊值「N」走了,下一次你打了網頁?

因爲HTTP是請求/響應協議。每個請求都會創建一個MyPage類的新實例,每個實例都有自己的「n」副本。在Windows窗體應用程序中,您可能不會在每次點擊按鈕時創建表單的新實例!