2014-10-02 33 views
0

我正在構建一個SMS系統。我有聯繫人並希望允許用戶選擇多個聯繫人並向他們發送消息。通過Ajax調用代碼隱藏設置捕獲會話數據

我想暫時保持用戶對聯繫人的選擇,以便當用戶點擊SEND按鈕時,我可以處理該列表。

我正在使用C#MVC4 Ajax調用後面的代碼來創建一個TempData或Session變量的方法。問題是,在設置TempData和Session變量後,我想在屏幕上顯示這些數據,但TempData和Session Variable都是空的。作爲一個測試,我只是在會話測試變量中保存「ok」。如果你有一個更好的主意可以達到同樣的目的,那麼它也會成爲一團糟。

感謝名單

//Javascript function residing on the View 
function addToSendList(id) { 
    $.ajax({ 
     type: "POST", 
     url: "AddToSendList", 
     contentType: "application/json;chartset=utf-8", 
     dataType: "json", 
     data: "{'id':'" + id + "'}", 
     success: function (data) { 
      alert(@Session["test"]); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      alert(errorThrown); 
     } 
    }); 
} 

//Method on Controller that is called 
public JsonResult AddToSendList(string id) 
{ 
    int cid = int.Parse(id); 
    List<Contact> contacts = (from c in db.Contacts 
     where c.Id==int.Parse(id) 
     select c).ToList(); 

    Session["test"] = "ok"; 
    return Json(contacts, JsonRequestBehavior.AllowGet); 
} 

編輯 抱歉,我犯了一個錯誤,我要送回去的接觸,加入到阿賈克斯的列表。那是我遇到問題的地方。我如何維護用戶選擇的列表?

回答

0

這將無法正常工作,因爲您正嘗試在JavaScript內部執行服務器端代碼。服務器端部分只會在最初呈現頁面時執行,並且不會在ajax回調中具有更新值。

您可以通過這種方式將值保存到會話中,但您無法在JavaScript中像這樣訪問它。

你可以考慮用控制器的json響應代替true標誌來傳遞它。

return Json(Session["test"]); 

success: function (data) { 
       alert(data); 
      } 
+0

thanx的答覆TGH, 我無法發送會話COX我需要返回接觸回觀。只有當我可以退還兩個,但我不認爲這是允許的。 – 2014-10-02 05:16:55

+0

你可以發回任何對象,所以你基本上可以包含你想要的任何信息。只需創建一個包含要發回的數據的自定義類。 – TGH 2014-10-03 04:18:35

+0

嗯,我可以創建一個匿名對象。真棒。 Thanx TGH – 2014-10-03 13:10:48

相關問題