前回の続きです。
GridViewを利用したExcelファイル出力の際に、『GridViewのコントロールGridView1は、runat=server を含む form タグの内側に置かなければ成りません』のエラーになってしまう対応の続きです。
前回は、
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control) ' このOverridesは以下のエラーを回避するために必要です。 ' 「GridViewのコントロールGridView1は、runat=server を含む ' form タグの内側に置かなければ成りません」 End Sub
を入れることで、VerifyRenderingInServerFormをOverridesして、サーバー フォーム要素の表示方法が異なっているページは、異なった条件の下でこのメソッドをオーバーライドして例外をスローしました。
第一関門突破です。
しかし、『RegisterForEventValidation は Render(); の実行中にのみ呼び出されることができます』
が発生するようになりました。
どうやらGridViewの列にButtonFieldやCommandFieldを使用している場合に、PostBackを検証対象処理として登録を行う際にRegisterForEventValidation を呼び出すようで、この中で Render 中かどうかがチェックされてしまうようです。
で、さらにググると、このチェックを行うかどうかは EnableEventValidation プロパティで制御できるようです。
Public Overrides Property EnableEventValidation() As Boolean Get ' 「RegisterForEventValidation は Render(); の実行中にのみ呼び出されることができます。」 ' を出ないようにする Return False End Get Set(ByVal value As Boolean) End Set End Property
これでエラーが発生せずExcelファイルの出力が可能になりました。
めでたしめでたし^^
ただ、単純にFalseにすると、今回の私のように入力コントロール等があるGridviewの場合、セキュリティ上まずいと思われるので、Excelファイルを作るときのみFalseになるように制御しないといけないと思います。
今回は気になったので調査しました。
以上ASP.NETのシステム開発備忘録でした。