12

col、colgroup、tbody、および thead タグを含む table タグを持つ .NET 3.5 Web サイトがあります。これは、runat="server" 属性を持つサーバー側タグです。このテーブルは Visual Studio 2010 では問題なく動作していましたが、Visual Studio 2012 と .NET 4.5 をインストールした後、このタグは Visual Studio 2010 と Visual Studio 2012 でコンパイルできなくなりました (両方試しました)。投げられています:

  • 'System.Web.UI.HtmlControls.HtmlTableRowCollection.Add(System.Web.UI.HtmlControls.HtmlTableRow)' に最適なオーバーロードされたメソッドに無効な引数が含まれています
  • 引数 '1': 'System.Web.UI.HtmlControls.HtmlGenericControl' から 'System.Web.UI.HtmlControls.HtmlTableRow' に変換できません

これが私が取り組んでいるものの例です:

<table id="TestTable" runat="server">
    <colgroup>
        <col width="30%" />
        <col width="70%" />
    </colgroup>
    <thead>
        <tr>
            <td>Sample header 1</td>
            <td>Sample header 2</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Sample cell 1</td>
            <td>Sample cell 2</td>
        </tr>
        <tr>
            <td>Sample cell 3</td>
            <td>Sample cell 4</td>
        </tr>
    </tbody>
</table>

サイトをコンパイルして作業を継続できるように、この問題を修正する方法を知っている人はいますか?

4

2 に答える 2

9

これは、Visual Studio 2012 および .NET 4.5 のインストール後の Web サイトに対する文書化されていない重大な変更のようです。Microsoft によって文書化された .NET 4.5 の変更でこれへの参照を見つけることができません: http://msdn.microsoft.com/en-us/library/hh367887.aspx

問題を調査した結果、壊れたテーブル タグの解決策として次の方法が考えられます。

  1. Visual Studio 2012 と .NET 4.5 をアンインストールします。参照: ASP.NET 4.5 でコンパイルされない tbody を含むサーバー側の HTML テーブル

    これが必ずしも理想的な解決策ではないことは承知していますが、以下の他の解決策のいずれも簡単に実装できない場合は、他に選択肢がない可能性があります。また、これが最初のエントリであるという理由だけで、これは私が主な解決策として推奨しているものではありません. それは単なるオプションです。

  2. Web サイトを Web アプリケーションに変換します。runat="server" を含むテーブルは、Web アプリケーションの使用時にファイルをコンパイルするように見えます。

    この変換を行うことには、Web アプリケーション内のコードに対する単体テストの記述が容易になるなど、追加の利点があります。ただし、Web サイトから Web アプリケーションへの変換に伴う作業を評価する必要があり、この変更を行う必要があることを上司や同僚に納得させる必要があります。

  3. テーブルのサーバー側コード (ページ/コントロールの背後にあるコード) を確認してください。サーバー側コードでコントロールを使用していますか? そうでない場合は、runat="server" を削除します。その後、ページは問題なくコンパイルされます。

    <table id="TestTable">
        <colgroup>
            <col width="30%" />
            <col width="70%" />
        </colgroup>
        <thead>
            <tr>
                <td>Sample header 1</td>
                <td>Sample header 2</td>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Sample cell 1</td>
                <td>Sample cell 2</td>
            </tr>
            <tr>
                <td>Sample cell 3</td>
                <td>Sample cell 4</td>
            </tr>
        </tbody>
    </table>
    
  4. サーバー側コードでコントロールを使用しています。col タグと colgroup タグを削除し、列のスタイルをテーブルの最初の行の td または th セルに移動します。(列の幅とスタイルは表の最初の行から継承されるため、たとえば、最初のセルで width="40%" を設定すると、その列のすべてのセルが width="40%" になります。) thead タグを削除し、テーブル内のすべての td セルを th (テーブル ヘッダー) セルに変更します。tbody タグを削除します。

    <table id="TestTable" runat="server">
        <tr>
            <th width="30%">Sample header 1</td>
            <th width="70%">Sample header 2</td>
        </tr>
        <tr>
            <td>Sample cell 1</td>
            <td>Sample cell 2</td>
        </tr>
        <tr>
            <td>Sample cell 3</td>
            <td>Sample cell 4</td>
        </tr>
    </table>
    
  5. およびコントロールで<asp:Table>タグを使用するように変換します。参考: ASP.NET テーブルで thead と tbody を作成するには?<asp:TableHeaderRow><asp:TableRow>

于 2012-09-19T18:04:30.813 に答える
4

この煩わしい問題を修正するホットフィックスがあります: Win7: http://support.microsoft.com/kb/2750147 (ASP.net Issue 3 を参照) http://www.microsoft.com/en-gb/download/details .aspx?id=36359

Win8 http://support.microsoft.com/kb/2750149

于 2013-04-11T20:51:40.967 に答える