2013-06-03 59 views
1

我正在處理asp.net mvc3應用程序。我想這是描述某處,但快速搜索沒有什麼幫助,而且我對使用會話變量的意見也非常不同,但我仍然有一點時間來做出決定。將多個值保存在一個會話變量中,然後檢索它們

的問題是,我在哪裏圖片庫圖像示有權限可以刪除一個或多個圖像的剃刀視圖和用戶。但是,當用戶單擊按鈕時,我無法刪除每個圖像,而是必須收集已從用戶「刪除」的圖像的id(我刪除了保存圖像的span標記),但實際上刪除是通過服務執行的,我必須一次將所有數據傳遞給服務。

這一切都是內部Html.BeginForm因此數據收集在提交之前,我需要一種方法來存儲這些值莫名其妙。使用會話似乎是目前最簡單的方法。我想是這樣的:

public void DeletePicture(long documentImageID) 
     { 
      if (documentImageID != null) 
      { 
       Session["imagesIdForDeleting"] = documentImageID; 
      } 
     } 

但用一個簡單的調試我想不出第一 - 如何在所有我可以從Session["imagesIdForDeleting"]訪問documentImageID值。我不知道這只是語法問題,或者我試圖讓事情比實際情況更簡單。此外 - 我不確定是否做出這樣的事情我實際上保存了所有的值,或者我重寫了以前的值,並且始終只有一個值存儲在會話變量中。無論如何,任何幫助如何實施這一權利,將不勝感激。

回答

1

您可以將列表存儲在Session中。

例如

public void DeletePicture(long documentImageID) 
    { 
     if(Session["imagesIdForDeleting"] == null) 
     { 
      Session["imagesIdForDeleting"] = new List<long>(); 
     } 

     if (documentImageID != null) 
     { 
      var list = (List<long >)Session["imagesIdForDeleting"]; 
      list.Add(documentImageID); 
     } 
    } 
+0

謝謝,完全按照我的預期工作。還有一個問題,如果我可以。當我想從同一控制器中的另一種方法接受此會話變量中的值時,我該怎麼做?通過再次投射'var list =(列表)Session [「imagesIdForDeleting」];或者我應該使用其他的東西? – Leron

+0

'list'在這裏仍然可以爲'null'。和'documentImageID' _cannot_是'null'。 –

+0

@格蘭托馬斯,你是絕對正確的。我剛剛向勒龍提供了一個想法。理想情況下,'if(documentImageID!= null)'應該是'if(documentImageID> 0)'。我想Leron剛剛提供了實際代碼的純粹skelaton,因此我沒有入侵那裏。 – Satpal

0

我不知道,如果讓這樣的事情,我居然保存所有 值或我重寫先前的值,並始終保存在session變量只有一個值 。

是的,你說得對覆蓋存儲的值。

使用鍵入的列表來存儲圖像並將其放入會話中。

public void DeletePicture(long documentImageID) 
     { 
      if (documentImageID != null) 
      { 
       if(Session["imagesIdForDeleting"]) == null 
       { 
         Session["imagesIdForDeleting"] = new List<long>(); 
       } 

       ((List<long>)Session["imagesIdForDeleting"]).Add(documentImageID); 
      } 
     } 
+0

爲什麼不首先生成列表?過度訪問會話是不好的(在這種情況下更不用說危險 - 因爲它在設置和獲取之間仍然可以返回'null',所以盲目使用'Add'這個東西並不是好消息)。 –

+0

你是對的。我改變了這一點。 –

相關問題