必须将带有'LinkBut​​ton'类型的控件xxx放在带有runat = server的表单标签内

jp2*_*ode 4 .net c# asp.net datagrid

我有一个DataGrid,我试图在单击一个ASP.NET 按钮时导出.

错误屏幕

确切的错误是:

必须将带有'LinkBut​​ton'类型的控件'ctl00_body_RollupDG_ctl02_btnShowGLdetail'放在带有runat = server的表单标记内.

我在这里发现了类似的问题,但似乎都表明这是因为ASP.NET控件没有放在ContentPlaceHolder中,或者ContentPlaceHolder 没有放在RunAt Server表单中.

我有这两个,所以这不是这里的情况.

我的ExportExcelFile方法捕获RenderControl()处的HttpException(如上面的屏幕截图所示).该代码如下:

protected void ExportExcelFile(object Sender, EventArgs e) { //export to excel
    var grdResults = (periodCriteria.SelectedValue == "year") ? RollupDG : QuarterDG;
    var response = HttpContext.Current.Response;
    response.Clear();
    response.Charset = String.Empty;
    response.ContentType = "application/vnd.ms-excel";
    response.AddHeader("Content-Disposition", "attachment; filename=GlBudgetReport.xls");
    using (var sw = new StringWriter()) {
        using (var htw = new HtmlTextWriter(sw)) {
            grdResults.RenderControl(htw);
            response.Write(sw.ToString());
            response.End();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如下面的" 查找结果"框中所示,有几个ASP.NET LinkBut​​ton控件,但每个控件都包含该runat="server"子句.

查找结果

看来DataGrid中的LinkBut​​ton数据很难呈现为纯文本.

如果没有,我的导出方法中是否有可以配置的内容,以便将DataGrid数据全部解释为文本?

我可以创建一个空白的DataGrid,然后遍历填充的DataGrid,只写入每个字段的文本 - 但是如果绝对必要,我只想这样做.

Mal*_*alk 6

我相信你只需要覆盖检查表单的方法.您无需向该方法添加任何逻辑.只需将以下内容添加到您的代码中:

public override void VerifyRenderingInServerForm(Control control) { } 
Run Code Online (Sandbox Code Playgroud)

ETA:您可能还需要EnableEventValidation="false"<%@Page />元素中设置.