2011-09-26 111 views
2

當代碼var accNo = '<%=Session["hdnAccession"]%>';將被執行?我更改Page_LoadComplete事件中的會話變量,但是當我使用var accNo = '<%=Session["hdnAccession"]%>';訪問它時,它始終返回我設置的第一個值。在Page_LoadComplete,我喜歡以下... Session["hdnAccession"] = GetNewAccession(),當我調試時,我看到每次更新Session["hdnAccession"]。但爲什麼它不會在JavaScript中更新?我處於不能使用HiddenField而不是Seession的情況。從JavaScript訪問ASP.NET會話變量

+0

你試圖完成什麼? – Arief

+0

是否緩存頁面輸出? –

回答

2

您需要創建一個PostBack來訪問來自JS的會話變量。像這樣:

<script type="text/javascript"> 
<!-- 
function setSessionVariable(valueToSetTo) 
{ 
__doPostBack('SetSessionVariable', valueToSetTo); 
} 
// --> 
</script> 

private void Page_Load(object sender, System.EventArgs e) 
{ 
// Insure that the __doPostBack() JavaScript method is created... 
this.GetPostBackEventReference(this, string.Empty); 

if (this.IsPostBack) 
{ 
    string eventTarget = (this.Request["__EVENTTARGET"] == null) ? string.Empty : this.Request["__EVENTTARGET"]; 
    string eventArgument = (this.Request["__EVENTARGUMENT"] == null) ? string.Empty : this.Request["__EVENTARGUMENT"]; 

    if (eventTarget == "SetSessionVariable") 
    { 
    Session["someSessionKey"] = eventArgument; 
    } 
} 
} 

在這裏看到:http://forums.asp.net/post/2230824.aspx

1

必須使用一些服務器端控件來做到這一點(如HiddenField或RUNAT =「服務器」隱藏的範圍)。

<%= Session [「hdnAccession」]%>只會在您第一次進入頁面時進行評估,而不是在回發期間進行評估。

+0

我不能使用'HiddenField' – Rauf

0

當頁面呈現時,您的代碼塊正在獲取其值,因此應在客戶端正確看到在Page_LoadPage_LoadCompleted中設置的任何值。

如果不是,則必須有其他問題 - 嘗試通過向頁面添加一個臨時屬性來進行測試,在Page_Load中對其進行初始化並將其寫入客戶端(即var test = "<%=SomeProperty%>";)。

如果問題發生後才執行回發(這不是很清楚你的問題),你可能不得不使用隱藏的領域。可能還有其他方法可以解決這個問題,但是我看不到您可以實施它們並且無法添加隱藏字段的情況。