我有一個使用Ajax Page Methods的頁面。首次加載頁面時,會提示用戶選擇一年。這是回發發生的唯一時間。年存儲在名爲SelectedYear的私有靜態頁面級整數屬性中。有幾種頁面方法可以將數據從客戶端傳遞到服務器,但年份總是存儲在服務器上,因此不必再次傳入數據。問題是,在少數情況下,在服務器WebMethod中,SelectedYear屬性似乎恢復爲0.我可以測試0並將錯誤返回給客戶端,但如果我能解釋它爲什麼會發生,這將有所幫助。在這一點上,我不知道。有任何想法嗎?我對這種編程風格有點新鮮。這是一個(非常簡化)代碼示例。用戶必須選擇一年才能達到保存功能。Ajax PageMethod訪問頁面級別的私有靜態屬性
這裏是我的C#服務器代碼:
public partial class Default : System.Web.UI.Page
{
private static int SelectedYear;
protected void YearSelected(object sender, EventArgs e)
{
if (sender.Equals(btnCurrentYear))
SelectedYear = 2013;
else
SelectedYear = 2014;
}
[WebMethod]
public static bool Save(string FirstName, string LastName)
{
try
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
//Right here, SelectedYear is sometimes 0.
SaveApplication(FirstName, LastName, SelectedYear);
else
throw new Exception("User is not logged in.");
}
catch (Exception ex)
{
throw;
}
}
}
這裏是我的JavaScript客戶端代碼:
function Save(FirstName, LastName) {
PageMethods.Save(firstName, LastName, SaveSucceeded, SaveFailed);
}
function SaveSucceeded(result) {
//Notify user that save succeeded.
}
function SaveFailed(error) {
//Notify user that save failed.
}
我想我會在今年存儲爲客戶端上的加密值在一個隱藏字段,你所提出的建議。會話可能會導致問題,因爲在生產環境中,此應用程序在具有三個節點的負載平衡器上運行(使用粘滯位,因此用戶不會經常被傳遞),並且我只能使用進程內會話。但是,這揭示了將選定的一年存儲在服務器上會產生相同的影響,無論是在會話中還是其他地方。謝謝你的解釋。我現在更瞭解一些事情。 – LJFraney