0

aspxページにユーザーコントロールを登録しています。

一部のaspxページに抵抗されたユーザーコントロールのボタンがあり、viewsteの値をデータベースに保存するためのアクションを実行します。その下で、ビューステート値をクリアしましたが、右クリックしてページをリロードすると、値が再挿入されます。データベースに対して、欠落しているものやビューステートがクリアされない場合、データベースに同じエントリを再保存しないようにするにはどうすればよいですか。

私は部分的に以下のコードを書いています。

 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 に答える