Asp.net 为什么我的视图状态没有被清除,并在重新加载时再次将值保存到数据库?
我正在aspx页面上注册用户控件 在某些aspx页面上,用户控件上有一个按钮被抵制,该按钮执行一些操作以将viewste的值存储到数据库,下面我已清除了我的viewstate值,但如果我右键单击并重新加载页面,它会将值重新插入数据库,我缺少的内容或viewstate不会被清除,我应该如何防止它将相同的条目重新保存到数据库中 我正在下面部分编写代码Asp.net 为什么我的视图状态没有被清除,并在重新加载时再次将值保存到数据库?,asp.net,Asp.net,我正在aspx页面上注册用户控件 在某些aspx页面上,用户控件上有一个按钮被抵制,该按钮执行一些操作以将viewste的值存储到数据库,下面我已清除了我的viewstate值,但如果我右键单击并重新加载页面,它会将值重新插入数据库,我缺少的内容或viewstate不会被清除,我应该如何防止它将相同的条目重新保存到数据库中 我正在下面部分编写代码 protected void btnFinish_Click(object sender, EventArgs e) { i
protected void btnFinish_Click(object sender, EventArgs e)
{
if (ViewState["dtQuestions"] != null)
{
foreach (DataRow dr in dtQuestions.Rows)
{
int currQueScore = GetAnswerScore(dr["AnswerType"].ToString().Trim(), dr["ClientAnswerValue"].ToString().Trim());
dr["ClientAnswerScore"] = currQueScore;
myScore += currQueScore;
SurveyClientAnswer objDetail = new SurveyClientAnswer();
objDetail.SurveyClientID = objMaster.SurveyClientID;
objDetail.QuestionID = int.Parse(dr["QuestionID"].ToString());
objDetail.Answer = dr["ClientAnswerValue"].ToString();
objDetail.Score = int.Parse(dr["ClientAnswerScore"].ToString());
DB.SurveyClientAnswers.InsertOnSubmit(objDetail);
DB.SubmitChanges();
}
objMaster.FinalScore = myScore;
DB.SubmitChanges();
ViewState["dtQuestions"] = null;
}
else
{
ModalPopupExtender1.Show();
pnl.Visible = true;
}
}
如果不想重新插入数据,只需在数据库上创建一个唯一的约束来禁止这种情况 就在代码中执行此操作而言,您可能只能将添加此条件的数据插入到
if
语句中:
if(IsPostBack && (ViewState["dtQuestions"] != null)
{
//meaning the user is not simply reloading the page but actually posting back
}
请注意,在某些情况下,这可能不起作用。没有测试是很难知道的,但我坚信这应该在数据库级别处理。是否提示您在刷新时重新提交帖子信息?您可以重定向以避免刷新,或者检测刷新。请一些人帮我解决这个问题,我应该如何管理它?那么重新加载的实际意义是什么?它是否贯穿页面的整个生命周期?另外,我主要关心的是,当我清除viwestate时,它如何将值重新发送到DB?它是否贯穿页面的整个生命周期?->每次页面加载或回发都会经历页面生命周期。只有在单击按钮时才清除ViewState,简单的页面重新加载仍将具有与最初在ViewState中输入的值相同的值,但我看到在附加断点后,如果重新加载,仍按“提交”按钮并清除ViewState..我在逻辑上对其感到非常困惑,请您从页面生命周期的角度详细阐述一下好吗?