2011-01-28 7 views
4

私の.NETアプリケーションでGridView行編集機能を実装しました。<asp:CommandFieldを使用しました。 行を編集した後にレコードを保存するために、更新ボタンをクリックしました。ページをリフレッシュするか、F5 GridView_RowCommandをもう一度押してください。GridView_RowCommandイベントが再度ページリフレッシュで発生しました

これを避けるにはどうすればいいですか。ユーザーがF5キーを押すかページを更新するかを識別するメカニズムはありますか。クライアント側またはサーバー側にはメソッドがあります。

答えて

5

なく、あなたの問題を正確に最高の「技術的な」解決策がありますが、私はそれが最高の「技術的ではありません、言ったように、あなたのRowCommand

に行うために必要なものをやって終了した後、あなたは常にだけResponse.Redirect(Request.RawUrl)を行うことができます「解決策が、私はまた、更新ボタンで、ページの更新をクリックしたときにIsPostBackプロパティ= trueのだ、それは解決

デイブ

+0

ありがとうDave.Thisソリューションは本当に私のために働いた。それは私がRowCommand [Me.GetType()、 "k"、 "window.location.href = window.location .href "、True)]つまり、RowCommandコードが実行された後に、asp.netのページをリフレッシュするとGETリクエストとみなされます。なぜなら、リフレッシュ時にリトライやキャンセルを要求するポップアップが開かないからです。どうもありがとう。 – Sukhjeevan

+0

これはほぼ同じ種類のものですが、JavaScriptを使って実現しました。 – Dave

1
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. 
    } 
} 
+0

です。 – Sukhjeevan

+0

私はページをリフレッシュすると、Ispostback = trueとなり、データは再びupdatebuttonで既に保存されていたので保存されました。 – Sukhjeevan

+0

最後に挿入した値とセッション中のオブジェクトを保持し、最後に挿入された値と同じであるかどうかを確認します。もしそうなら、単に戻る。私は自分の答えを編集しています。 – Pabuc

1

これをキャプチャする方法の1つは、問題のページに関連するセッション変数を維持することです。セッション変数では、最後に取られたアクションを決定する何らかの種類の状態列挙、キーまたは文字列を保持します。単純な増分カウンタを使用することもできます。セッション変数と等しいポストバックカウンタを受け取った場合は、新しいアクションではなくページの更新を示します。

関連する問題