2013-04-08 53 views
2

我有一個下拉列表的Web應用程序。當選擇新索引時,我必須將該值存儲到在Session_Start事件上創建的會話變量。會話變量+ WebMethod變量值不更新

protected void Session_Start(object sender, EventArgs e) 
{ 
    Session.Add("testValue", "test"); 
} 

上的selectedIndex更改事件我設置的新值這樣

Session["testValue"] = DropDownList.SelectedItem.Text; 

我有一個Web服務,我檢索會話變量這樣的值:

[WebMethod(EnableSession = true)] 
public string getValue() 
{ 

    var testVal = Session["testValue"].ToString(); 

    return testVal.ToString(); 
} 

從控制檯應用程序連接到Web服務並檢索由getValue()返回的值,但始終返回初始值。有什麼想法嗎?

+0

檢查下拉列表中的項目值是否不同 – Srinivas 2013-04-08 12:28:37

+0

您說'從控制檯應用程序' - 您是否期望您的控制檯應用程序和Web瀏覽器共享相同的會話? – 2013-04-08 12:42:19

+0

嗨理查德,我的意圖是讓webMethod檢索會話變量值,目前正在做我訪問webservice.asmx時,並調用相應的返回值的方法。當從控制檯應用程序訪問url時,它是否應該是相同的行爲? – krafo 2013-04-08 12:56:20

回答

0

這裏的值不會更改,您沒有更改這些值。所以沒有什麼預期

public string getValue() 
{ 
    var testVal = Session["testValue"].ToString(); 
    return testVal.ToString(); 
} 

這個錯誤可能是在下拉列表

protected void Page_Load(object sender, EventArgs e) 
{ 
if (!Page.IsPostBack) 
{ 
    Session["testValue] = dropdownlist1.SelectedItem.text; 
} 
} 

而且,

protected void dropdownlist1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
Session["testvalue"] = dropdownlist1.SelectedItem.text; 
} 

還與

System.Web.HttpContext.Current.Session["testvalue"] 

兩部分中嘗試

+0

該方法不應更改會話變量的值,而是檢索它。會話變量的值在DropDown的SelectedIndexChanged事件中發生變化 – krafo 2013-04-08 12:31:01

+0

會話變量值會相應地改變,因爲當我通過它的url訪問webservice並調用方法時,它會返回客戶端選擇的值。從控制檯應用程序訪問webmethod時的問題。 – krafo 2013-04-08 12:48:01

+0

嘗試使用靜態方法。 +1 – 2013-04-08 12:55:23

0

檢查下拉列表中的項目值是否不同。這對於選定的已更改索引更改事件是必不可少的。

1

問題是因爲當控制檯應用程序運行時,似乎創建了一個新的會話。使用應用程序狀態使用Application.Set和Application.Get解決了這個問題。希望當系統被多個用戶使用時,我不會有問題。