我很难理解为什么以下代码不起作用。我确信这是一种补救措施,我缺少或不理解。我目前有一个页面要求用户输入。如果基于输入和登录用户,我在数据库中找到了此页面中的数据,我需要更新现有记录而不是创建新记录,因此我将类级别bool设置为true。问题是,当单击MyNextButton时,PreviouslySubmitted仍为false。所以,我不确定如何使这个变量的值持续存在。感谢任何建议,谢谢。
public partial class MyForm : System.Web.UI.Page
{
private bool PreviouslySubmitted;
protected void Page_Load(object sender, EventArgs e)
{
MyButton.Click +=
(o, i) =>
{
q = from a in db.TableA
where (a.SomeField == SomeValue)
select a;
if(q.Any())
{
PreviouslySubmitted = true;
//populate the form's fields with values from database for user to revise
}
}
MyNextButton.Click +=
(o, i) =>
{
//the value of PreviouslySubmitted is false at this point,
//even if I made sure it was set to true the previous postback
if(PreviouslySubmitted)
{
//update database
}
else
{
//insert into database
}
}
答案 0 :(得分:1)
将previousSubmitted变量声明为静态。
重要更新
对不起,我没有检查“基于输入和登录用户”部分问题。
为什么它的工作很简单:请求和页面回发之间没有共享状态 - 缺少HTTP协议。
因此,正在使用ViewState机制在每个请求上重建页面控件的状态,但是您自己的对象,字段和变量不是。每个页面请求(访问者)都有自己的MyForm类实例,但静态变量对所有这些实例都是通用的。因此,删除static关键字并使用ViewState / SessionState存储每个用户的PreviouslySubmitted变量的值。
答案 1 :(得分:0)
您的代码正在创建两个事件处理程序。你确定按照你期望的顺序打电话给他们吗?如果第一个被称为第一个,你会遇到这个问题。您可能应该将两个事件处理程序的代码合并为一个。