1

名前と住所が記載された簡単な登録フォームがあります。ユーザーがフォームに入力して送信すると、データが DB に挿入されます。

また、成功アラート メッセージが表示されます。

ユーザーが更新ボタンをクリックすると、成功アラート ボックスが表示され、同じ行が DB に複製されます。

これを回避する方法。

データベースに存在する場合は使用したくありません。

どんな助けでも大歓迎です。

ありがとう

4

3 に答える 3

1

通常、ページを更新すると、直前のクリック イベントが発生し、DB に再挿入されます。このチェックを回避するには、ページが更新されているかどうか、またはボタン クリック イベントではないかどうかを確認します。

public partial class Class1 : System.Web.UI.Page
{
   #region Code to Check Refresh postback
   #region Private Variable
   private int SessionValue
   {
    get
    {
        int value = default(int);
        if (int.TryParse(Convert.ToString(this.Session["__REFRESH"]), out value))
            return value;

        return 0;
    }
    set
    {
        this.Session["__REFRESH"] = value;
    }
   }

   private int ViewStateValue
   {
    get
    {
        int value = default(int);
        if (int.TryParse(Convert.ToString(this.ViewState["__REFRESH"]), out value))
            return value;

        return 0;
    }
    set
    {
        this.ViewState["__REFRESH"] = value;
    }
   }
   #endregion

   #region Public Property
   public bool IsPageRefreshed
   {
    get
    {
        return this.SessionValue != this.ViewStateValue;
    }
   }
   #endregion

   protected override object SaveViewState()
   {
    //Increment both the session and view state value at the same time.
    this.SessionValue = this.SessionValue == int.MaxValue ? 0 : this.SessionValue + 1;
    this.ViewStateValue = this.SessionValue == int.MaxValue ? 0 : this.SessionValue + 1;
    return base.SaveViewState();
   }
   #endregion


   protected void Page_Load(object sender, EventArgs e)
   {       
   }

   protected void Button_Click(object sender, EventArgs e)
   {
       if (IsPageRefreshed)
       {
         // Here do your work. i.e save into DB.
       }
   }
}

これを試して。これがあなたの期待するものであることを願っています。

于 2013-05-17T11:28:15.217 に答える
0

実際のシナリオでは、説明したように、手動更新シナリオを処理するための 2 つのオプションがあります。

  1. 「そして、成功の警告メッセージが表示されます」と表示されている間。「あなたのデータは正常に保存されました。次のレコードのためにフォームをクリアしますか? オプションは「はい」と「いいえ」です。ユーザーが「はい」をクリックすると、フォームを元のデータ入力状態にリセットする必要があります (ユーザーが入力した以前の状態に)フォームの入力を開始しました). これにより、更新シナリオが防止されます. はいまたはいいえのメッセージを表示せずに、デフォルトでフォームをリセットすることもできます.

  2. 2 つ目は、レコードを入力するエンティティのレコードを一覧表示する他のページの同じページにユーザーをリダイレクトすることです。例: Add Employee ページから Employee リスト ページにリダイレクトします。

これらのいずれかを実装できることを願っています。

于 2013-07-01T06:53:08.847 に答える
0

重複を本当に回避するには、挿入する前にデータがデータベースに既に存在するかどうかを確認する必要があります。ページの更新時にこの動作を回避したい場合は、挿入後にユーザーを別のページにリダイレクトできます。

Response.Redirect("other_page.aspx");
于 2013-05-17T10:38:04.563 に答える