0

我在 aspx 页面上注册了用户控件。

用户控件上有一个按钮在某些 aspx 页面上被抵制,该按钮执行一些操作以将 viewste 的值存储到数据库中,在该按钮下方我已经清除了我的 viewstate 值,但是如果我右键单击并重新加载页面,它会重新插入值到数据库,我缺少什么或视图状态没有被清除,我应该如何防止它重新将相同的条目保存到数据库中。

我在下面部分编写我的代码。

 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;

        }

    }
4

1 回答 1

0

如果您不想重新插入数据,只需在数据库上创建一个唯一约束以禁止这种情况。

就在代码中执行此操作而言,您可能只能将数据添加到if语句中:

if(IsPostBack && (ViewState["dtQuestions"] != null)
{
    //meaning the user is not simply reloading the page but actually posting back
}

请注意,在某些极端情况下这可能不起作用。没有测试很难知道,但我坚信这应该在数据库级别处理。

于 2012-05-24T11:01:24.517 回答