[SPRN07088]【クライアント】ブラウザの戻るボタンを押下した後にポストバックすると、ポストバックの前後でSPREADの値が変更される場合がある

文書番号 : 26535     文書種別 : 制限事項     最終更新日 : 2008/11/26
文書を印刷する
対象製品
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

この文書は、以前は次のFAQ IDで公開されていました : 7755