名前と住所が記載された簡単な登録フォームがあります。ユーザーがフォームに入力して送信すると、データが DB に挿入されます。
また、成功アラート メッセージが表示されます。
ユーザーが更新ボタンをクリックすると、成功アラート ボックスが表示され、同じ行が DB に複製されます。
これを回避する方法。
データベースに存在する場合は使用したくありません。
どんな助けでも大歓迎です。
ありがとう
通常、ページを更新すると、直前のクリック イベントが発生し、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.
}
}
}
これを試して。これがあなたの期待するものであることを願っています。
実際のシナリオでは、説明したように、手動更新シナリオを処理するための 2 つのオプションがあります。
「そして、成功の警告メッセージが表示されます」と表示されている間。「あなたのデータは正常に保存されました。次のレコードのためにフォームをクリアしますか? オプションは「はい」と「いいえ」です。ユーザーが「はい」をクリックすると、フォームを元のデータ入力状態にリセットする必要があります (ユーザーが入力した以前の状態に)フォームの入力を開始しました). これにより、更新シナリオが防止されます. はいまたはいいえのメッセージを表示せずに、デフォルトでフォームをリセットすることもできます.
2 つ目は、レコードを入力するエンティティのレコードを一覧表示する他のページの同じページにユーザーをリダイレクトすることです。例: Add Employee ページから Employee リスト ページにリダイレクトします。
これらのいずれかを実装できることを願っています。
重複を本当に回避するには、挿入する前にデータがデータベースに既に存在するかどうかを確認する必要があります。ページの更新時にこの動作を回避したい場合は、挿入後にユーザーを別のページにリダイレクトできます。
Response.Redirect("other_page.aspx");