2012-04-16 6 views
0

私のgridviewは、基本的にユーザーが選択した結果のヒットリストで、どのユーザーが選択したかをポストバックする必要があります。ヒットリストは、アイテムを選択するとすぐに消滅するため、ポストバックラウンドトリップにグリッドの内容が存続する必要はありません。viewstateなしでgridviewにポストバックを許可する最善の方法

ヒットリストが大きい可能性があるので、私はviewstateを使いたくありません。検索に時間がかかることがあるので、私はPageLoadのデータベースからデータバインドしてグリッドを再投入する必要はありません。

私は現時点では考えていることは、私は、これはまだ少しだ__doPostBack

を隠しフィールドで選択した項目のIDを格納し、呼び出すために「選択」リンクをいくつかのjavascriptを置くことができるということですclunky。あなたはよりクリーンな方法を考えることができますか?

答えて

2

ポストバックは、ユーザーが行のどこかをクリックすると、クライアントonclickハンドラ添付するItemDataBoundイベントを使用してトリガする必要がある場合は、次の

protected void GridView1_ItemDataBound(object sender, GridViewRowEventArgs e) 
{ 
    var dataItem = e.Item as GridViewRow; 
    if (dataItem != null) 
    { 
     dataItem.Attributes["onclick"] = string.Format("__doPostBack(this, '{0}')", e.Row.RowIndex); 
    } 
} 
+0

ありがとう、それは基本的に私がやったことです。実際には、私は行全体ではなくリンクボタンにonclickハンドラを追加し、イベント引数にアイテムのIDを入れました。 Page_Loadの__EVENTTARGETと__EVENTARGUMENTを見て検出する必要があることがわかりましたが、それでも問題なく動作しています。私は、彼らがかなり簡単にこれを行う方法で構築していないことに驚いています。それは、同じページへのポストバックである必要があるという共通の要求であるようです。 – Andy

0

はいけない敏感な何か選択した項目のIDですユーザーが見ることができますか?

もしそうでなければ、IDをクエリーストリング変数として、選択ボタンに次のページへのリンクを付けることができます。クリックするだけで次のページに移動し、ポストバックは必要ありません。

+0

画面上にはviewstateが必要な他のコントロールやものがたくさんあるので、「get」を使うことはできません。 – Andy

関連する問題