我有一个使用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