将页面导出word,下拉框和单选按钮报必须放在具有 runat=server 的窗体标记内的错误

//如果输出为Word,修改为以下代码Response.ContentType="application/ms-word";Response.AddHeader("Con... //如果输出为Word,修改为以下代码
Response.ContentType = "application/ms-word";
Response.AddHeader("Content-Disposition", "inline;filename=test.doc");
StringBuilder sb = new StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(sb);
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(sw);
sb.Append("<html><body><form id='form2' runat='server'>");
table1.RenderControl(hw);
//dgShow.RenderControl(hw);
sb.Append("</form></body></html>");
Response.Write(sb.ToString());
Response.End();
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏5(财富值+成长值)
Huinebaby
2014-11-05 · TA获得超过836个赞
知道小有建树答主
回答量:557
采纳率:100%
帮助的人:164万
展开全部
<body>
<form id="Form1" runat="server">

<asp:Button id="xxx" ........>

</form>
<body>

解决方法

在页面中重写Page基类的VerifyRenderingInServerForm方法 (在后台页面中加上此段代码就不会报错了)
public override void VerifyRenderingInServerForm(Control control)
{ // Confirms that an HtmlForm control is rendered for }
解释如下:
必须位于 <form runat=server> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息。发送回或依赖于注册的脚本块的控件应该在 Control.Render 方法的重写中调用此方法。呈现服务器窗体元素的方式不同的页可以重写此方法以在不同的条件下引发异常。

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

开发自定义服务器控件时,通常在为任何类型的输入标记重写 Render 方法时调用该方法。这在输入控件调用 GetPostBackEventReference 或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。
追问
Control报域名空间,此处作为类型使用错误
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式