ASP.NET/VB.NET Webアプリケーションで単純なゲームを構築しています。ゲームはいくつかのImageButtonで構成されたUIを持っています。UpdatePanelを使用したAsyncPostBackの後のコードビハインド内のオブジェクトのNullReference
ウェブページのコードビハインドファイルは、プレーヤーが撮影した各ターンを管理するゲームのゲームオブジェクトへのインスタンスを保持します。
GameオブジェクトのメソッドがSharedだったときはすべて機能しました。
ゲームオブジェクトを共有クラスの代わりにインスタンスとして動作させるために、リファクタリング後に問題が発生しました。アクションがコードビハインドに戻ると、ゲームオブジェクトのインスタンスはになりません。です。
これはビューの状態と関係していると思われますが、Googleは手伝っていません。
符号ビット:
Public Class _Default
Inherits System.Web.UI.Page
Private _gamePanel As Panel
Private _updatePanel as UpdatePanel
Private _game as Game
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
'create a new instance of the game object on first loading page
_game = New Game(width, height, cellsToWin)
End If
' DisplayGameBoard() does the following:
' * Add images to the GameBoard panel inside of the GameBoardUpdatePanel
' * Attach click event handler to each image (addressOf located in this
' code behind file
' * DisplayGameBoard() works fine the first time but fails on
' subsequent post backs because there is no game object instance
Me.DisplayGameBoard()
End Sub
(ページディレクティブから)
Language="vb"
AutoEventWireup="false"
CodeBehind="Default.aspx.vb"
Inherits="Game._Default"
ValidateRequest="false"
EnableEventValidation="false"
EnableViewState="true"
(ウェブページの更新パネル)
<asp:UpdatePanel ID="GameBoardUpdatePanel"
runat="server"
UpdateMode="Conditional"
RenderMode="Block"
EnableViewState="true"
ViewStateMode="Enabled"
ChildrenAsTriggers="true" >
<ContentTemplate>
<asp:Label ID="PlayerName"
runat="server"></asp:Label>
<asp:Panel ID="GameBoard"
runat="server"
cssclass="gameBoard"></asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>