【问题标题】:Error in table when adding runat=server添加 runat=server 时表中的错误
【发布时间】:2012-09-18 20:46:13
【问题描述】:

我的 ASPX 页面中有一个 html 表,并希望在代码隐藏中使用它进行一些处理。下表如下:

<table class="hovertable" id="tblData">
    <tr>
        <th>ID:</th>
        <td colspan="3" style="font-weight: bold">
            <%= Eval("ID") %>
        </td>
    </tr>
    <tr>
        <th>Date:</th>
        <td><%# Eval("Date", "{0:dd-MMM-yyyy}") %></td>
        <th>Amount:</th>
        <td><%# Eval("Amount", "{0:C}") %>
    </tr>
</table>

但是,当我将 runat="server" 属性添加到我的表时,会出现以下错误:

CS1502: The best overloaded method match for 'System.Web.UI.HtmlControls.HtmlTableRowCollection.Add(System.Web.UI.HtmlControls.HtmlTableRow)' has some invalid arguments

任何想法这里可能有什么问题?我错过了什么吗?

【问题讨论】:

    标签: c# asp.net .net html-table runatserver


    【解决方案1】:

    删除以下元素

    <thead>
    </thead>
    <tbody>
    </tbody>
    

    【讨论】:

      【解决方案2】:

      此外,如果我们删除 tbody 元素,它不会因为 td mismatch 引发错误 尼基尔·米塔尔

      【讨论】:

        【解决方案3】:

        好的,伙计们,我已经自己解决了这个问题。导致它的问题是因为 &lt;td&gt; 没有相应的 &lt;tr&gt; 元素。 如下所示:

        <table class="hovertable" id="tblData">
            <tr>
                <th>ID:</th>
                <td colspan="3" style="font-weight: bold">
                    <%= Eval("ID") %>
                </td>
            </tr>
            <tr>
                <th>Date:</th>
                <td><%# Eval("Date", "{0:dd-MMM-yyyy}") %></td>
                <th>Amount:</th>
                <td><%# Eval("Amount", "{0:C}") %>
            </tr>
            <td colspan='4'>
               Some data....
            </td>
        </table>
        

        【讨论】:

        • 我的代码昨晚可以正常工作,但今天早上不行。 ??? &lt;table id="whatever" runat="server"&gt; 应该没问题。这就是微软在their example here 中所说的方式。
        【解决方案4】:

        一个 html 表(不是纯 asp.net 服务器控件)不能包含 asp.net 服务器控件。看看这个答案:

        http://forums.asp.net/t/1524580.aspx/1

        在我看来,你应该问自己以下问题吗?

        我需要解决这个客户端还是服务器端?

        如果你的答案是客户端,你应该用 Ajax 实现更新逻辑,否则你可以使用 ASP.NET 服务器控件并在服务器端实现它。

        【讨论】:

        • 有趣的是,我已经在另外 2 个 aspx 页面中尝试过同样的事情并且它有效。但不在此特定页面中。
        • @ConfusedProgrammer 这听起来像“它在我的机器上工作?”。
        • @ConfusedProgrammer 我指的是您的“特定页面”评论。也许这个特定页面与您现在实施的页面不同,我看不到。事实是您尝试在 html 表中使用服务器控件,但这是行不通的。我不打算成为一个硬汉,只是想帮助你!
        • 我已经检查过了,除了行数和列数之外,肯定没有区别。它们都使用 html 表中的服务器控件,并且能够从代码隐藏中读取。仅在此页面上,我就遇到了问题。我完全感到困惑和沮丧。
        • 您是否尝试使用服务器端控件,然后看看会发生什么?
        【解决方案5】:

        尝试在需要操作数据的地方添加&lt;asp:Labels&gt;

        <table>
        <tr><td><asp:Label id="lblRow" runat="server" /></td></tr>
        </table>
        

        如果标签中有runat="server",则无法通过代码访问表列和行,因为它们是纯html。

        另一种方法是使用StringBuilder在代码隐藏中创建html表格,并使用asp:LiteralControl输出表格。

        【讨论】:

        • 你好,我的实际目的是渲染表格的html输出,放在邮件正文中,然后原样发送。
        【解决方案6】:

        我认为您可以将其用于相同目的

        <asp:Table ID="Table1" runat="server">
        </asp:Table>
        

        您要做的是将runat="server" 属性添加到HTML 控件

        【讨论】:

        • &lt;asp:Table /&gt; 是 WebControls 版本,而 &lt;table runat="server" /&gt; 是 HtmlControls 版本。两者之间存在渲染差异。
        • 我可以,但我有很多表,其中包含大量行和列,需要更改并消耗大量时间。因此,我将 runat=server 用于快速访问它。
        猜你喜欢
        • 2017-02-05
        • 2012-05-11
        • 2010-10-28
        • 2016-12-02
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        相关资源
        最近更新 更多