关于类型“LinkButton”的控件“xxx”必须放在具有 runat=server 的窗体标记内问题的解决方案
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> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误消息。 发送回或依赖于注册的脚本块的控件应该在 Control.Render 方法的重写中调用此方法。 呈现服务器窗体元素的方式不同的页可以重写此方法以在不同的条件下引发异常。
如果回发或使用客户端脚本的服务器控件没有包含在 HtmlForm 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。 这些控件可以在呈现时调用该方法,以在它们没有包含在 HtmlForm 控件中时提供明确的错误消息。
开发自定义服务器控件时,通常在为任何类型的输入标记重写 Render 方法时调用该方法。 这在输入控件调用 GetPostBackEventReference 或发出客户端脚本时尤其重要。 复合服务器控件不需要作出此调用。
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" %>
关于类型“LinkButton”的控件“xxx”必须放在具有 runat=server 的窗体标记内问题的解决方案的更多相关文章
- 类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。
		错误的写法: if (this.GridView1.Rows.Count > 0) { string style = @"<style& ... 
- 错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内 .
		错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内 在做导出数据到EXCEL程序中,出现了错误提示:类型“GridView”的控件“Gr ... 
- 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常
		导出到Excel方法: <span style="color: rgb(0, 0, 255);">public</span> <span style= ... 
- 类型“XXX”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。
		问题:类型“Grid1”的控件“XXXX”必须放在具有 runat=server 的窗体标记内. 注:Grid1为表格的ID. 查找网上的解决大致为: 1)把Grid放到<form runat= ... 
- 注意:"AspNetPager”的控件“AspNetPager1”必须放在具有 runat=server 的窗体标记内
		应加: <form id="form1" runat="server"> </form> 否则一开始什么也不显示,页面控件看不见,加上a ... 
- 类型“GridView”的控件必须放在具有 runat=server 的窗体标记内?
		Response.AddHeader("content-disposition", "attachment;filename=CRM.xls") Respons ... 
- GridView”的控件 必须放在具有 runat=server 的窗体标记内 “错误提示”
		在做导出数据到EXCEL程序中,出现了错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记 解决办法 重写 VerifyRendering ... 
- dev的控件放在没有runat="server"的标签中,回调出现的问题
		dev的控件放在没有runat="server"的标签中,第一次回调是会刷新页面, 有runat="server"时不会刷新页面 
- WPF中Popup控件在Win7以及Win10等中的对齐点方式不一样的解决方案 - 简书
		原文:WPF中Popup控件在Win7以及Win10等中的对齐点方式不一样的解决方案 - 简书 最近项目中使用弹出控件Popup,发现弹出框的对齐方式在不同的系统中存在不同(Popup在win10上是 ... 
随机推荐
- poj 2349  Arctic Network
			http://poj.org/problem?id=2349 Arctic Network Time Limit: 2000MS Memory Limit: 65536K Total Submis ... 
- 斯特灵数 (Stirling数)
			@维基百科 在组合数学,Stirling数可指两类数,都是由18世纪数学家James Stirling提出的. 第一类 s(4,2)=11 第一类Stirling数是有正负的,其绝对值是个元素的项目分 ... 
- Arduino Due, Maple and Teensy3.0 的 W5200性能测试
			开源平台中以太网连接方案里W5100是众所周知的,W5200正在此领域越来越受欢迎.这个测试结果是在Arduino Due(Atmel CortexM3-84Mhz), Maple(ST Cortex ... 
- Windows-to-go-带着win10满街跑
			一.前言 有句话是这么说的,程序员对工作是时刻准备着的.无论你是长假还是短假,只要有网,你就躲不开客户.这样子,当你外出的时候你可以选择时刻背着电脑,因为你的电脑有着你顺手的开发工具以及开发环境.我们 ... 
- MFC 视图、文档、框架(通讯)
			CMainFrame * pMainWnd=(CMainFrame*)AfxGetApp()->m_pMainWnd;//主框架 CChildFrame * pChild = (CChildFr ... 
- SQLite多线程写锁文件解决方案
			在sqlite编程中多线程同时写时会出现异常,我写了个类来解决这个问题. 思路很简单,就是在开始写操作时,记下写操作的托管线程id,表示目前有线程正在做写操作:其他线程来写时,需要先检测是否有进程正在 ... 
- 关于Linux vi命令 vi命令一览表
			vi是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,通过它可以编辑文件.当然,对UNIX系统略有所知的人,或多或少都觉得vi超级难用,但vi是最基本的编辑器,学好了vi,以后在UNIX世 ... 
- sql2008“备份集中的数据库备份与现有数据库不同”解决方法
			因为是在另一台电脑对同名数据库做的备份,用常规方法还原,提示不是相同数据库,不让还原,在网上找到下面的方法解决了: 一.右击系统数据库master,新建查询 执行以下SQL代码: RESTORE DA ... 
- httpclient发送request请求时设置header和timeout
			package com.xxx.xxx.common; import java.io.BufferedReader; import java.io.InputStreamReader; import ... 
- C/C++程序猿必须熟练应用的开源项目
			作为一个经验丰富的C/C++程序猿, 肯定亲手写过各种功能的代码, 比方封装过数据库訪问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件訪问的类, 封装过UI界面库等, 也在实际的项目中应 ... 
