使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误

使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误摘要GridView控件常有需要汇出Excel的需求,一般都是将GridView使用RenderControl来输出其HTML程序代码。本文即在讨论RenderControl所产生的问题及解决方式,不过本文是透过BasePage的方式,让RenderControl的相关处理动作更简化。手动解决RenderControl所产生的问题下面的Contr…

大家好,又见面了,我是你们的朋友全栈君。

摘要
GridView 控件常有需要汇出 Excel 的需求,一般都是将 GridView 使用 RenderControl 来输出其 HTML 程序代码。本文即在讨论 RenderControl 所产生的问题及解决方式,不过本文是透过 BasePage 的方式,让 RenderControl 的相关处理动作更简化。

手动解决 RenderControl 所产生的问题
下面的 ControlToHTML 函式,主要是将控件转换为对应的 HTML 程序代码。

 1
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
    
/**/
”’ <summary>
 2使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    ”’ 将控件转换为对应的 HTML 程序代码。
 3使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    ”’ </summary>
 4使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    ”’ <param name=”Control”>控件。</param>



 5
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
    
Public
 
Shared
 
Function ControlToHTML()
Function ControlToHTML(ByVal Control As System.Web.UI.Control) As String
 6使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Dim sHTML As String = String.Empty
 7使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Dim oTextWriter As New System.IO.StringWriter()
 8使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Dim oHTMLWriter As New System.Web.UI.HtmlTextWriter(oTextWriter)
 9使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
10使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Control.RenderControl(oHTMLWriter)
11使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        sHTML = oTextWriter.ToString()
12使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Return sHTML
13使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    End Function

你可以整个 GridView 控件传入 ControlToHTML 来取得它的 HTML 程序代码,不过当执行此方法时,会遇到由 Page.VerifyRenderingInServerForm 方法释出的错误讯息。
当执行下面的程序代码时

Dim sHTML As String = ControlToHTML(GridView1)

会产生错误讯息

型别 ‘GridView’ 的控件 ‘GridView1’ 必须置于有 runat=server 的窗体标记之中。

要解决这个问题就是让 Page 不要执行 VerifyRenderingInServerForm 方法,所以 Page 要覆写 VerifyRenderingInServerForm 方法,而不做任何事。

1
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
Public
 
Overrides
 
Sub VerifyRenderingInServerForm()
Sub VerifyRenderingInServerForm(ByVal Control As System.Web.UI.Control)
2使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误     覆写,不执行 MyBase.VerifyRenderingInServerForm 方法,解决执行 RenderControl 产生的错误
3使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误End Sub

接下来继续执行程序,若 GridView 有 CommandFIeld 或分页时,它会去做事件验证的动作,而会引发另一个错误讯息

RegisterForEventValidation 只能在 Render(); 期间呼叫

要解决这个问题,可以切换到 aspx 程序代码中,在 <%@ Page %> 中加入 EnableEventValidation=”false” 即可。

<%@ Page Language=”VB” AutoEventWireup=”false” EnableEventValidation=”false” CodeFile=”Default.aspx.vb” Inherits=”_Default” %>

 
使用 BasePage 解决 RenderControl 所产生的问题
虽然上述的方式可以解决 RenderControl 产生的问题,可是似乎有点太麻烦,有没有更简单的方式呢?我们用 BasePage 来处理这个问题,不用当有这类需求时还要去手动故这些设定。
TBBasePage 继承 Page,新增一个 IsVerifyRender 属性(预设为 True),来决定是否执行 MyBase.VerifyRenderingInServerForm 方法。首先覆写 VerifyRenderingInServerForm 方法,当 IsVerifyRender=”False” 时,不会去执行 MyBase.VerifyRenderingInServerForm 方法;另外覆写 EnableEventValidation 方法,当 IsVerifyRender=”False” 则传回 False。当我们要用 RenderControl 来输出控件的 HTML 码时,只需先设定 IsVerifyRender = “False” 即可。

 1
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
/**/
”’ <summary>
 2使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误”’ 页面基础类别。
 3使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误”’ </summary>



 4
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
Public
 
Class TBBasePage
Class TBBasePage
 5使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    Inherits System.Web.UI.Page
 6使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
 7使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    Private FIsVerifyRender As Boolean = True
 8使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
 9使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    /**/”’ <summary>
10使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    ”’ 是否执行 VerifyRenderingInServerForm 方法。
11使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    ”’ </summary>

12使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    Public Property IsVerifyRender()Property IsVerifyRender() As Boolean
13使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Get
14使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误            Return FIsVerifyRender
15使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        End Get
16使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Set(ByVal value As Boolean)
17使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误            FIsVerifyRender = value
18使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        End Set
19使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    End Property

20使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
21使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    /**/”’ <summary>
22使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    ”’ 覆写。
23使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    ”’ </summary>
24使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    ”’ <param name=”Control”></param>
25使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    ”’ <remarks></remarks>

26使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    Public Overrides Sub VerifyRenderingInServerForm()Sub VerifyRenderingInServerForm(ByVal Control As System.Web.UI.Control)
27使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        If Me.IsVerifyRender Then
28使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误            MyBase.VerifyRenderingInServerForm(Control)
29使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        End If
30使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    End Sub

31使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
32使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    /**/”’ <summary>
33使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    ”’ 覆写。启用事件验证动作。
34使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    ”’ </summary>

35使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    Public Overrides Property EnableEventValidation()Property EnableEventValidation() As Boolean
36使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Get
37使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误            If Me.IsVerifyRender Then
38使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误                Return MyBase.EnableEventValidation
39使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误            Else
40使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误                Return False
41使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误            End If
42使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        End Get
43使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Set(ByVal value As Boolean)
44使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误            MyBase.EnableEventValidation = value
45使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        End Set
46使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    End Property

47使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
48使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误End Class


有了 TBBasePage 的 IsVerifyRender 属性后,我们就可以将上述的 ControlToHTML 函式,改写如下。当 GridView 控件置放在 TBBasePage 时,执行 ControlToHTML 函式时,不需另行设定即能正常执行。

 1
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
    
/**/
”’
 
<summary>


 2
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    
”’
 将控件转换为对应的 HTML 程序代码。

 3
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    
”’
 
</summary>


 4
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    
”’
 
<param name=”Control”>
控件。
</param>


 5
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
    
Public
 
Shared
 
Function ControlToHTML()
Function ControlToHTML(ByVal Control As System.Web.UI.Control) As String
 6使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Dim sHTML As String = String.Empty
 7使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Dim oTextWriter As New System.IO.StringWriter()
 8使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Dim oHTMLWriter As New System.Web.UI.HtmlTextWriter(oTextWriter)
 9使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
10使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        If Control.Page IsNot Nothing Then
11使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误            If TypeOf Control.Page Is TBBasePage Then
12使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误                DirectCast(Control.Page, TBActionPage).IsVerifyRender = False
13使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误            End If
14使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        End If
15使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误
16使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Control.RenderControl(oHTMLWriter)
17使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        sHTML = oTextWriter.ToString()
18使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误        Return sHTML
19使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误    End Function

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162046.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 光棍节程序员闯关秀——闲来无事玩玩儿游戏~

    光棍节程序员闯关秀——闲来无事玩玩儿游戏~告诉我没女朋友的人不学习干嘛???第一次写题解,有点激动哈咳咳~话说为什么“光棍”老得和程序员挂上钩?人家好多程序员有车子有房子有票子有漂亮老婆有可爱的孩子人生早就已经圆满了好吗?!!【正经脸】第一关:(上图后发现右下角神奇的多了一个水印原谅没见过世面的我(ಡωಡ)hiahiahia)话不多说直接查看源码。发现有个颜色被隐藏在背景色中的超链接(忽悠小孩儿呢

    2022年7月16日
    16
  • 44页智慧生活社区+智慧小区建设方案[通俗易懂]

    44页智慧生活社区+智慧小区建设方案[通俗易懂]喜欢文章可以【转发➕评论】,关注公众号“智慧方案文库“,私信获取解决方案。本文章引用的资料均通过互联网等公开渠道合法获取,仅作为行业交流和学习使用,并无任何商业目的。其版权归原资料作者或出版社所有,作者不对所涉及的版权问题承担任何法律责任。若版权方、出版社认为本文章侵权,请立即通知作者删除。更多方案【2021】77页数字李生智慧园区解决方案(附下载)【2021】102页新一代数字化转型信息化总体规划方案(附下载)【2021】85页5G+物联网智慧校园解决方案(附下载)【2021】60页智慧城市运营管理平台

    2022年10月17日
    3
  • 华为 达芬奇芯片 架构_寒武纪的AI架构

    华为 达芬奇芯片 架构_寒武纪的AI架构达芬奇架构是基于AI计算功能设计的,并基于高性能3DCube计算引擎,极大地提高了计算能力和功耗比。根据达芬奇架构,进行了以下优化:多核堆栈用于并行计算能力扩展通过设计片上存储器on-chipmemory(高速缓存/缓冲区Cache/Buffer)以缩短Cube操作和存储距离,减少了对DDR的访问,并减轻了冯·诺依曼的瓶颈问题。在计算和外部存储之间设计了高带宽片外存储器(HBM),以克服计算资源共享存储器的访问速度限制。为了支持大规模的云侧神经网络训练,设计了超高频段网状网络(LSU),以

    2022年9月6日
    6
  • matlab保存所有图,Matlab中图片保存的5种方法

    matlab保存所有图,Matlab中图片保存的5种方法matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的。Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf、mesh系类的数值绘图函数等几十个。另外其他专业工具箱也提供了专业绘图函数,这些值得大家深入学习好久。今天我只是讨论下如何保存这些由Matlab绘制出来的图像呢?当然借助第三方截图软件,就算了!1、使用imwrite函数如图像是img,则可以使用im…

    2025年9月7日
    4
  • 数据库关系代数除法意义_关系代数运算除法

    数据库关系代数除法意义_关系代数运算除法除法运算的定义:这个概念的描述的非常抽象,刚开始学习的同学完全不知所云。这里通过一个实例来说明除法运算的求解过程设有关系R、S如图所示,求R÷S的结果求解步骤过程:第一步:找出关系R和关系S中相同的属性,即Y属性。在关系S中对Y做投影(即将Y列取出);所得结果如下第二步:被除关系…

    2025年8月1日
    2
  • maven镜像还有不支持发型版本5

    maven镜像还有不支持发型版本5maven镜像<mirror> <id> alimaven </id> <mirrorOf> central </mirrorOf> <name> aliyunmaven </name> <url> http://maven.aliyun.com/nexus/content/repositories/central/ </u

    2022年8月21日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号