【问题标题】:GridView must be added to a form tag for renderingGridView 必须添加到表单标签才能呈现
【发布时间】:2011-06-14 10:52:10
【问题描述】:
TextWriter tr = new StringWriter();
HtmlTextWriter writer = new HtmlTextWriter(tr);
HtmlForm form = new HtmlForm();
form.Controls.Add(divQueryDescription);
divQueryDescription.RenderControl(writer);

<div runat="server" id="divQueryDescription">
    <asp:GridView runat="server" id="grv"></asp:GridView>
</div>

我的 GridView 在 DIV 中,我将该 DIV 添加到 HtmlForm 中,以便可以将其呈现为字符串。但我收到以下错误:-

Gridview 'grv' 必须放在带有 runat=server 的表单标签内,尽管我的 Gridview 已经在表单内,因为我将 DIV 添加到表单中。

如何将此 DIV 呈现为字符串?

【问题讨论】:

  • 请发布完整的表单设计。
  • @Muhammad 页面的 html 中没有表单。我正在动态创建表单,因为我需要通过电子邮件发送该内容。
  • 我已经更新了我的答案,以解决我认为之前被忽视的问题;但是,请不要为了引起更多关注而两次发布您的问题 - 您的另一个问题中的额外数据可能会被编辑到这个问题的正文中以使其更新:stackoverflow.com/questions/6343630/…
  • @Muhammad:这将呈现完整的表格,而不是那个 DIV。包括 Form Tag 、 viewState 等在内的所有内容都会被渲染。

标签: c# .net asp.net


【解决方案1】:

只需在您的页面中添加以下代码

public override void VerifyRenderingInServerForm(Control control)
{
  return;
}

要了解更多信息,请阅读MSDN documentation

【讨论】:

  • 我没有这种方法可以覆盖我的情况。因为我在 UserControl 上有我的 DIV。
  • 在托管您的 UserControl 的页面中覆盖它 - 我没有尝试过,但这应该可以解决问题
  • 您可能还需要使用 page.VerifyRenderingInServerForm(this) 从 UserCotrol 代码中调用它
【解决方案2】:

确保您的表单元素/控件中有 runat="server"

【讨论】:

    【解决方案3】:

    从您在这里向我们展示的内容来看,GridView 已经在带有runat="server"form 元素中,您需要执行以下操作:

    <form runat="server">
        <div runat="server" id="divQueryDescription">
            <asp:GridView runat="server" id="grv"></asp:GridView>
        </div>
    </form>
    

    特别值得注意的是&lt;form runat="server"&gt; 部分及其结束标记。

    更新:

    看起来form 引起了问题,因为它没有被写出,你直接从div 写出:尝试使用form.RenderControl(writer);

    【讨论】:

    • 我已将 DIV 动态添加到 HtmlForm...请再次查看代码...GridView 位于该 DIV 中...所以 GridView 不是自动添加到该 Form 的 Controls 集合中吗?
    • 如果我直接将GridView添加到HtmlForm的Controls Collection中,这个异常就消失了。
    猜你喜欢
    • 2017-07-12
    • 1970-01-01
    • 2012-01-05
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2011-11-15
    相关资源
    最近更新 更多