posts - 437, comments - 1501, trackbacks - 13, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理
    今天在开发的时候遇到了一个问题,情况大致是这样的:我的页面需要一个导出到Excel的功能,于是我便利用GridView控件的RenderControl()来输出数据,可是在运行的时候却遇到了““类型“GridView”的控件“grvZB”必须放在具有 runat=server 的窗体标记内。”的错误。于是我赶紧查看HTML代码,发现我的<form>标签是有runat="server"标记的,只是声明<form>标签的地方离声明GridView的地方有些远。没办法啊。有错误就赶紧修复吧。于是我打开了熟悉的Google。输入错误信息,发现搜索的结果多是让在<form>标签上加runat=server标记的,明显和我的不符合。所幸最后找到了一个解决方法,具体如下:
    在页面中重写Page基类的
VerifyRenderingInServerForm方法
     public override void VerifyRenderingInServerForm(Control control)
    {
        // Confirms that an HtmlForm control is rendered for
    }
MSDN对该方法的解释如下:

必须位于 <form runat=server> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息。发送回或依赖于注册的脚本块的控件应该在 Control.Render 方法的重写中调用此方法。呈现服务器窗体元素的方式不同的页可以重写此方法以在不同的条件下引发异常。

如果回发或使用客户端脚本的服务器控件没有包含在 HtmlForm 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 HtmlForm 控件中时提供明确的错误信息。

开发自定义服务器控件时,通常在为任何类型的输入标记重写 Render 方法时调用该方法。这在输入控件调用 GetPostBackEventReference 或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。

注:今天在网上看到了另一个解决方法,此方法更好,可以让我们不用重写VerifyRenderingInServerForm方法,代码如下:

Code



作者:张荣华
出处:http://zhangronghua.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Feedback

#1楼  回复 引用 查看   

2008-11-07 08:58 by 冀中      
俺也遇到类似问题,按LZ方法测试已经通过,感谢!

#2楼  回复 引用 查看   

2009-04-04 22:15 by 大气象      
谢谢,学到了。

#3楼  回复 引用 查看   

2009-04-11 11:12 by Mr.Slippery      
解决了~非常感谢~
还有就是不知道第二种方法的注释语言是那个国家的~

#4楼  回复 引用   

2009-05-08 14:10 by liu8421[未注册用户]
问题解决了,多谢!

#5楼  回复 引用 查看   

2009-08-28 16:57 by 旭旭      
解决一大难题!

#6楼  回复 引用 查看   

2009-09-14 12:39 by 出道      
你好啊我的 导入Exacl 中文出现乱码了

#7楼[楼主]  回复 引用 查看   

2009-09-15 16:10 by 张荣华      
@出道
修改一下输出流的编码就可以了。

#8楼  回复 引用   

2009-10-09 09:58 by 小清[未注册用户]
十分感谢~~~

#9楼  回复 引用 查看   

2009-10-20 13:10 by 风乱发      
我今天也遇到了此问题,谢谢了

#10楼  回复 引用 查看   

2009-11-16 09:07 by 清凉一夏      
我也遇到了此问题,但第二种[code]的代码怎么看不到啊?

#11楼  回复 引用 查看   

2010-08-10 09:55 by 婉林      
谢谢了 问题解决了
不知道datatable直接可以不可以 待会去试一下

#12楼  回复 引用 查看   

2010-08-26 14:50 by ZhongJieKing      
文章很好,但是如何控制word 中文档的格式呢,能不能把数据直接人数据库中导出到word 中

#13楼  回复 引用 查看   

2010-12-15 22:29 by csshaw      
很不错

#14楼  回复 引用 查看   

2011-01-14 11:08 by 金色海洋(jyk)      
试了一下你的方法,原来的错误没了,出了一个新的。

在 DataBind、Init、Load、PreRender 或 Unload 阶段,不能修改该控件集合。

我的情况是,在自定义控件里面,设置了一个属性 GridView类型的属性。

外部放一个GridView,然后把实例设置给这个属性。

其他的功能都能实现。page.RenderControl(htw);没有成功。

#15楼  回复 引用 查看   

2011-05-13 11:01 by 帕特里克      
代码里的注释是德文,博主真猛
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 951899 0UACKZRVApU=