- PR -

EnableViewStateを無効にした場合のイベント取得

1
投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2004/06/03
投稿数: 30
投稿日時: 2006-06-05 11:26
一覧表示にDataGridを利用しています。
そのDataGridにイメージボタンを配置しています。

イメージボタンを押下した場合、押下された行を取得し
別画面へ遷移するように作成しています。

これまでは、EnableViewStateを有効にていたのですが、
VIEWSTATEが膨大に記述(?)されるため、無効にしようと
思っています。

しかし、無効にしたとたん、画面遷移を行わなくなって
しまいました。


何かご存知のことがありましたら、お願いします。
初歩的なことかもしれませんが、よろしくお願いします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-06-05 12:18
ViewStateには表示時の状態が保存されています。
ASP.NETランタイムはViewStateと実際にポストされたデータを比較してイベントの発生を制御しているので、
ViewStateを無効にしてはいけないのではないでしょうか?
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-06-05 12:54
ASP.NET はビューステートを使ってイベントを実現しているので、イベント処理を行いたい箇所はビューステートを有効にしておかねばなりません。

引用:

VIEWSTATEが膨大に記述(?)


「膨大」は人によって感じ方は違うと思いますが、そんなに多いですか?
_________________
囚人のジレンマな日々
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-06-05 18:58
引用:

イメージボタンを押下した場合、押下された行を取得し
別画面へ遷移するように作成しています。



ポストバックイベントだと難しいでしょうね。
どのボタンが押されたかは、隠しフィールドの __EVENTTARGETで判断がつくと思います。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27819&forum=7

あるいは、ImageButtonのかわりにHyperLinkを置いて、別画面にリンクするとか。
プライマリーキーをクエリーで渡す。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-06-06 22:28
 ビューステートの書き出し、読み込みをオーバーライドして、サーバが(ファイルなどに)保持する、、、という方法が、どこかで紹介されていたような???

 とりあえず、patterns & practics から、ビュー ステートのチューンナップ
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-06-06 23:25
todo さんと同じで
ViewState が使えない場合で他のページに飛ばしたいだけなら
HyperLink おいてクエリ文字列埋め込んで飛ばしちゃいますね
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2006-06-07 13:08
引用:

Jittaさんの書き込み (2006-06-06 22:28) より:
 ビューステートの書き出し、読み込みをオーバーライドして、サーバが(ファイルなどに)保持する、、、という方法が、どこかで紹介されていたような???



こんな感じで、Session に保持させるという手も。

コード:

Private Sub Control1_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Init
If Me.Page.IsPostBack Then
Me.LoadViewState(Page.Session(Me.ClientID & "_states"))
Else
Me.Page.Session.Remove(Me.ClientID & "_states")
End If
End Sub

Private Sub Control1_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Unload
Me.Page.Session.Add(Me.ClientID & "_states", Me.SaveViewState())
End Sub



[ メッセージ編集済み 編集者: きくちゃん 編集日時 2006-06-07 13:09 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-06-08 22:01
これだったのかなぁ?→PageStatePersister クラス
引用:

既存のビューステート永続化機構に対応していないクライアントでビューステートを保持するには、PageStatePersister クラスを拡張して独自のビューステート永続メソッドを使用し、ページ アダプタを使用して、ページが表示されるクライアントの種類に応じて異なるビューステート永続化機構を使用するように ASP.NET アプリケーションを構成できます。


1

スキルアップ/キャリアアップ(JOB@IT)