[SPRN07088]【クライアント】ブラウザの戻るボタンを押下した後にポストバックすると、ポストバックの前後でSPREADの値が変更される場合がある
対象製品
SPREAD for .NET 2.5J Web Forms Edition
発生環境
動作保証環境と同様
詳細
ブラウザの戻るボタンを押下した後にポストバックすると、セルの値がポストバックの前後で異なります。
■ SPREADの状態管理にビューステートを利用している場合(デフォルト設定)
【手順】
1.新規Webフォームを2つ用意し、そのうちの1つ(Default.aspx)にSPREAD1つButton2つを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.A1セルのチェックを外します
4.Button1を押下してDefault2.aspxに移動します
5.ブラウザの戻るボタンを押下してDefault.aspxに戻ります
6.A1セルのチェックボックスはチェックされていません
7.そのままの状態でButton2を押下してポストバックします
8.A1セルがチェックされます
【サンプルコード】
-------------------------
Webフォームクラス(Default.aspx.vb)
-------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
Return
End If
Dim c As New FarPoint.Web.Spread.CheckBoxCellType
FpSpread1.ActiveSheetView.Columns(0).CellType = c
Dim i As Integer
For i = 0 To FpSpread1.ActiveSheetView.RowCount - 1
FpSpread1.ActiveSheetView.Cells(i, 0).Value = True
Next
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
FpSpread1.SaveChanges()
Response.Redirect("Default2.aspx")
End Sub
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
FpSpread1.SaveChanges()
End Sub
■ SPREADの状態管理にセッションを利用している場合
【手順】
1.新規Webフォームを2つ用意し、そのうちの1つ(Default.aspx)にSPREAD1つButton2つを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.B1セルに「aaa」と入力します
4.Button1を押下してDefault2.aspxに移動します
5.ブラウザの戻るボタンを押下してDefault.aspxに戻ります
6.B1セルには「test」と表示されています
7.そのままの状態でButton2を押下してポストバックします
8.B1セルの値が「aaa」に変更されます
【サンプルコード】
-------------------------
Webフォームクラス(Default.aspx.vb)
-------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
Return
End If
Dim i As Integer
For i = 0 To FpSpread1.ActiveSheetView.RowCount - 1
FpSpread1.ActiveSheetView.Cells(i, 1).Value = "test"
Next
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
FpSpread1.SaveChanges()
Response.Redirect("Default2.aspx")
End Sub
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
FpSpread1.SaveChanges()
End Sub
Protected Sub FpSpread1_SaveOrLoadSheetState(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SheetViewStateEventArgs) Handles FpSpread1.SaveOrLoadSheetState
Dim saveKey As String = "SPREADSTATE1" + e.Index.ToString()
If (e.IsSave) Then
Session(saveKey) = e.SheetView.SaveViewState()
Else
e.SheetView.LoadViewState(Session(saveKey))
End If
'SPREADのViewStateの内容をページに出力しない
e.Handled = True
End Sub
■ SPREADの状態管理にビューステートを利用している場合(デフォルト設定)
【手順】
1.新規Webフォームを2つ用意し、そのうちの1つ(Default.aspx)にSPREAD1つButton2つを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.A1セルのチェックを外します
4.Button1を押下してDefault2.aspxに移動します
5.ブラウザの戻るボタンを押下してDefault.aspxに戻ります
6.A1セルのチェックボックスはチェックされていません
7.そのままの状態でButton2を押下してポストバックします
8.A1セルがチェックされます
【サンプルコード】
-------------------------
Webフォームクラス(Default.aspx.vb)
-------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
Return
End If
Dim c As New FarPoint.Web.Spread.CheckBoxCellType
FpSpread1.ActiveSheetView.Columns(0).CellType = c
Dim i As Integer
For i = 0 To FpSpread1.ActiveSheetView.RowCount - 1
FpSpread1.ActiveSheetView.Cells(i, 0).Value = True
Next
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
FpSpread1.SaveChanges()
Response.Redirect("Default2.aspx")
End Sub
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
FpSpread1.SaveChanges()
End Sub
■ SPREADの状態管理にセッションを利用している場合
【手順】
1.新規Webフォームを2つ用意し、そのうちの1つ(Default.aspx)にSPREAD1つButton2つを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.B1セルに「aaa」と入力します
4.Button1を押下してDefault2.aspxに移動します
5.ブラウザの戻るボタンを押下してDefault.aspxに戻ります
6.B1セルには「test」と表示されています
7.そのままの状態でButton2を押下してポストバックします
8.B1セルの値が「aaa」に変更されます
【サンプルコード】
-------------------------
Webフォームクラス(Default.aspx.vb)
-------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
Return
End If
Dim i As Integer
For i = 0 To FpSpread1.ActiveSheetView.RowCount - 1
FpSpread1.ActiveSheetView.Cells(i, 1).Value = "test"
Next
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
FpSpread1.SaveChanges()
Response.Redirect("Default2.aspx")
End Sub
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
FpSpread1.SaveChanges()
End Sub
Protected Sub FpSpread1_SaveOrLoadSheetState(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SheetViewStateEventArgs) Handles FpSpread1.SaveOrLoadSheetState
Dim saveKey As String = "SPREADSTATE1" + e.Index.ToString()
If (e.IsSave) Then
Session(saveKey) = e.SheetView.SaveViewState()
Else
e.SheetView.LoadViewState(Session(saveKey))
End If
'SPREADのViewStateの内容をページに出力しない
e.Handled = True
End Sub
この文書は、以前は次のFAQ IDで公開されていました : 7755