を使用して、.net アプリケーションに GridView 行編集機能を実装し<asp:CommandField
ました。行を編集した後、[更新] ボタンをクリックしてレコードを保存しました。ページを更新するか、F5 を押すと、GridView_RowCommand が再度発生しました。
これを回避するにはどうすればよいですか。ユーザーが F5 キーを押したとき、またはページを更新したときを識別するメカニズムはありますか。クライアント側またはサーバー側に何らかの方法がありますか。
を使用して、.net アプリケーションに GridView 行編集機能を実装し<asp:CommandField
ました。行を編集した後、[更新] ボタンをクリックしてレコードを保存しました。ページを更新するか、F5 を押すと、GridView_RowCommand が再度発生しました。
これを回避するにはどうすればよいですか。ユーザーが F5 キーを押したとき、またはページを更新したときを識別するメカニズムはありますか。クライアント側またはサーバー側に何らかの方法がありますか。
あなたの問題に対する最良の「技術的」解決策ではResponse.Redirect(Request.RawUrl)
ありませんが、RowCommandで必要なことをすべて完了したら、いつでも実行できます
私が言ったように、それは最善の「技術的」解決策ではありませんが、解決策です
デイブ
Session["LastInsertedItem"] = null;
MyCustomObjType myCustomObject;
protected void Page_Load(object sender, EventArgs e)
{
myCustomObject = Session["LastInsertedItem"] as MyCustomObjType;
}
void GridView_RowCommand(Object sender, GridViewCommandEventArgs e)
{
If(myCustomObject == null || //!(compare your value with myCustomObject.field) )
{
// do your operations and save the values to myCustomObject and save that object back to Session.
}
else
{
// It is refreshed or same data is being insterted - don't know if second option is possible in your case.
}
}
これをキャプチャする 1 つの方法は、問題のページに関連するセッション変数を維持することです。セッション変数では、最後に実行されたアクションを決定するある種の状態列挙、キー、または文字列を保持します。単純なインクリメント カウンターを使用することもできます。セッション変数と等しいポストバック カウンターを受け取った場合は、新しいアクションではなくページの更新を示します。