All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
LINQ体验(17)——LINQ,to,SQL语句之动态查询_[Asp.Net教程]
SQL循序渐进(8)删除记录_[SQL,Server教程]
2个ASP.NET小技巧_[Asp.Net教程]
ASP.NET中“找不到指定模块”的解决办法_.net资料_编程技术
组合.NET数据控件构建强大用户接口_.net资料_编程技术
十二 Meta标签_[Html教程]
ASP.NET,2.0中CSS不正常问题及解决_[Asp.Net教程]
客户端回调实现gridView无刷新分页_[Asp.Net教程]
全文索引——CONTAINS,语法_[SQL,Server教程]
配置Apache2+PHP5+MYSQL5_[PHP教程]
Reading number is top 10 pictures
你是左脑型还是右脑型
The terra-cotta warriors1
Seductive beauty of crime2
Photographed the passion of the clients and prostitutes in the sex trade picture2
你白吃了多少药
29 the belle stars after bath figure4
The money of more than 100 countries and regions14
The money of more than 100 countries and regions17
Look for from human art net, is good--2
9.3阅兵全景图3-外国方阵梯队和坦克方阵梯队
Download software ranking
Tram sex maniac 2 (H) rar bag15
功夫熊猫2(下集)
Rio big adventure
dreamweaver8中文版
Unix video tutorial17
Eclipse 4.2.2 For Win32
Unix video tutorial3
Sora aoi‘s film--Lust fan wall
WebService在.NET中的实战应用教学视频 → 第1集
Twenty piece of palm leaf
归海一刀 published in(发表于) 2014/1/30 1:07:16 Edit(编辑)
使用,BasePage,来解决,GridView,执行,RenderControl,产生的错误_[Asp.Net教程]

使用,BasePage,来解决,GridView,执行,RenderControl,产生的错误_[Asp.Net教程]

使用 BasePage 来解决 GridView 执行 RenderControl 产生的错误_[Asp.Net教程]

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


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



1 /**/'''


2 ''' 将控件转换为对应的 HTML 程序代码。
3 '''

4 ''' 控件。
5 Public Shared Function ControlToHTML()Function ControlToHTML(ByVal Control As System.Web.UI.Control) As String
6 Dim sHTML As String = String.Empty
7 Dim oTextWriter As New System.IO.StringWriter()
8 Dim oHTMLWriter As New System.Web.UI.HtmlTextWriter(oTextWriter)
9
10 Control.RenderControl(oHTMLWriter)
11 sHTML = oTextWriter.ToString()
12 Return sHTML
13 End Function


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


Dim sHTML As String = ControlToHTML(GridView1)


会产生错误讯息


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


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



1Public Overrides Sub VerifyRenderingInServerForm()Sub VerifyRenderingInServerForm(ByVal Control As System.Web.UI.Control)
2 '覆写,不执行 MyBase.VerifyRenderingInServerForm 方法,解决执行 RenderControl 产生的错误
3End 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/**/'''


2''' 页面基础类别。
3'''

4Public Class TBBasePageClass TBBasePage
5 Inherits System.Web.UI.Page
6
7 Private FIsVerifyRender As Boolean = True
8
9 /**/'''
10 ''' 是否执行 VerifyRenderingInServerForm 方法。
11 '''

12 Public Property IsVerifyRender()Property IsVerifyRender() As Boolean
13 Get
14 Return FIsVerifyRender
15 End Get
16 Set(ByVal value As Boolean)
17 FIsVerifyRender = value
18 End Set
19 End Property
20
21 /**/'''
22 ''' 覆写。
23 '''

24 '''
25 '''
26 Public Overrides Sub VerifyRenderingInServerForm()Sub VerifyRenderingInServerForm(ByVal Control As System.Web.UI.Control)
27 If Me.IsVerifyRender Then
28 MyBase.VerifyRenderingInServerForm(Control)
29 End If
30 End Sub
31
32 /**/'''
33 ''' 覆写。启用事件验证动作。
34 '''

35 Public Overrides Property EnableEventValidation()Property EnableEventValidation() As Boolean
36 Get
37 If Me.IsVerifyRender Then
38 Return MyBase.EnableEventValidation
39 Else
40 Return False
41 End If
42 End Get
43 Set(ByVal value As Boolean)
44 MyBase.EnableEventValidation = value
45 End Set
46 End Property
47
48End Class
有了 TBBasePage 的 IsVerifyRender 属性后,我们就可以将上述的 ControlToHTML 函式,改写如下。当 GridView 控件置放在 TBBasePage 时,执行 ControlToHTML 函式时,不需另行设定即能正常执行。


1 /**/'''


2 ''' 将控件转换为对应的 HTML 程序代码。
3 '''

4 ''' 控件。
5 Public Shared Function ControlToHTML()Function ControlToHTML(ByVal Control As System.Web.UI.Control) As String
6 Dim sHTML As String = String.Empty
7 Dim oTextWriter As New System.IO.StringWriter()
8 Dim oHTMLWriter As New System.Web.UI.HtmlTextWriter(oTextWriter)
9
10 If Control.Page IsNot Nothing Then
11 If TypeOf Control.Page Is TBBasePage Then
12 DirectCast(Control.Page, TBActionPage).IsVerifyRender = False
13 End If
14 End If
15
16 Control.RenderControl(oHTMLWriter)
17 sHTML = oTextWriter.ToString()
18 Return sHTML
19 End Function


来源:http://www.cnblogs.com/jeff377







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.