博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于类型“LinkButton”的控件“xxx”必须放在具有 runat=server 的窗体标记内问题的解决方案...
阅读量:7094 次
发布时间:2019-06-28

本文共 1282 字,大约阅读时间需要 4 分钟。

1.首先确认LinkButton控件包含在Form中,检查该Form有无runat标记,如果有,排除Form原因,请继续看。

2.如果看到这里,估计你是在做Excel导出功能。在后台代码中重写VerifyRenderingInServerForm方法:

    public override void VerifyRenderingInServerForm(Control control)    

   {        

        // Confirms that an HtmlForm control is rendered for    

   } 

      个人认为,出现此问题的原因是导出Excel时,浏览器响应的类型为context.Response.ContentType=" application/excel " ; 而非常规的"text/html"类型,此时浏览器响应服务器下载Excel,已经"忘 记"当前页面(不知道这么说恰不恰当),只记得响应当前用户的Excel导出请求,故出现LinkButton没有加载在Form中的异常情况。

MSDN对此方法的解释:

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

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

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

3.小伙伴们可能会发现,重写VerifyRenderingInServerForm后页面依然报错,不过不再报'类型“LinkButton”的控件“xxx”必须放在具有 runat=server 的窗体标记内'这个错了,这是一个好消息。具体错误信息为:只能在执行 Render() 的过程中调用 RegisterForEventValidation(RegisterForEventValidation can only be called during Render();)

解决办法:在前台aspx页面的page指令中添加EnableEventValidation = "false",修改如下:

<%@ Page Language="C#" EnableEventValidation = "false" AutoEventWireup="true" CodeFile="ExportRepeater.aspx.cs" Inherits="ExportRepeater" %>

转载于:https://www.cnblogs.com/the-three/p/3725015.html

你可能感兴趣的文章
Java下利用Jackson进行JSON解析和序列化
查看>>
Js用正则表达式验证字符串
查看>>
大疆农业专家在线空开课直播课件知识
查看>>
怎样快速搜索自己所需的资料?(90%的人不会使用此方法)[转]
查看>>
POJ_2411_Mondriaan's Dream_状态压缩dp
查看>>
694. Number of Distinct Islands - Medium
查看>>
vue打包后出现的.map文件
查看>>
前端应用框架(三)
查看>>
多线程的死锁
查看>>
定时任务框架Quartz-(一)Quartz入门与Demo搭建
查看>>
css导航栏
查看>>
洛谷3195(HNOI2008)玩具装箱
查看>>
智能公交报站系统RFID解决方案
查看>>
计算最长英语单词链(单词接龙)
查看>>
vsftp虚拟用户配置
查看>>
oracle11g与oracle10g字符集子集与超集的对应关系表
查看>>
登录注册D
查看>>
deepin-wine-tim 字体发虚
查看>>
windows多线程没那么难
查看>>
ID3决策树算法原理及C++实现(其中代码转自别人的博客)
查看>>