2011-11-23 47 views
0

在下面我試圖在類級別上定義一個名爲_p的私有變量。用於索引的HTTP.POST將帶來一個用戶提供的值,我將使用該私有變量。在名爲ListOfVehicles的第二個方法中,我將訪問此變量。無法從同一類的不同方法/函數訪問類級別的私有變量

現在一切從理論上講都是好的,但是當我嘗試訪問這個私有變量時,我什麼也沒有得到,這是什麼都沒有發現。

Public Class QuotationController 
    Inherits System.Web.Mvc.Controller 

    'Private Variables 
    Dim _p As String 

    'Get Basic pickup and dropoff details 
    Function Index() As ActionResult 
    Return View() 
    End Function 

    'Function to get basic details out of the view 
    'and to redirect to ListOfVehicles 
    <HttpPost()> 
    Function Index(ByVal P As String, ByVal D As String) As ActionResult 
    _p = P 
    Return RedirectToAction("ListOfVehicles") 
    End Function 

    'Show list of vehicels 
    Function ListofVehicles() As ActionResult 
    ViewData("UserChoice") = "Pickup: " & _p 
    vehicleList = QB.GetQuotation(_p, _d) 
    Return View(vehicleList) 
    End Function 

End Class 
+0

如果有兩個用戶呢? – SLaks

回答

1

這是根本不可能的。

每個HTTP請求獲取一個單獨的控制器實例;他們不分享任何東西。

根據需要,您應該使用Cookie,會話,應用程序狀態或緩存。

對於您的情況,您應該在POST中將該變量包含在<form>的其他操作中。

+0

感謝您的回覆 – user1001493

+0

對我而言,每個請求都獲得控制器的新實例對我而言是新事物。但以下情況如何: 視圖#1將一些數據發回控制器,根據數據View#2顯示給用戶。 查看#2發回數據,最後查看#3合併從視圖#1,2和3獲得的所有內容並顯示給用戶。 它是如何做的? 我在這裏有什麼意義嗎? – user1001493

+0

@ user1001493:您需要傳遞所有數據以及每次回發或使用會話。 – SLaks

0

如果你不希望添加一個正式的參數後,您可以使用

TempData.Add("P", P); 

只是return語句之前,在你ListOfVeicles您可以通過配件系列

string p = TempData["P"]; 

溫度數據是有效的只是在請求範圍內

編輯:對不起,C#語法,我沒有使用VB,因爲好的舊時代ov VB 6

+0

感謝您的回覆 這確實能解決我的問題。 關於它的使用有什麼特別的問題嗎?像性能,安全等?是否有其他方式實現相同的目標(任何行業特定的最佳實踐)? – user1001493

+0

不,TempData是由於這個原因而添加的,我只是添加了至少使用TempData名稱的常量(我討厭代碼中的魔術字符串)。 TempData是短暫的,因此它不增加任何安全問題。 – BigMike

相關問題