

テーブルに実際には2行あるのに、HtmlTableコントロールから1行しか読めないです。

まずaspxファイルにはテーブルがあります。

[code]

        <table runat="server" id="datatable" border="1">
            <tbody>
            <tr>
                <td>名前</td><td>年齢</td><td>部署</td><td>備考</td>
            </tr>
            </tbody>
        </table>
    
[/code]

ページロード時にサーバー側で下記のようにデータを追加しておきます。

[code]

    HtmlTableRow row = new HtmlTableRow();
    // rowにデータ格納する
    datatable.Rows.Add(row);
    
[/code]

これでデータが2行になって表示されます。

でも、POSTされたときに

[code]

    int n = datatable.Rows.Count;
    
[/code]

で行数を取得しても1が返ってきます、


CC BY-SA 3.0
2016-01-30T16:58:27.737
21514
2016-01-30T22:37:28.257
14192
question
c# .net asp.net
ASP.NET HtmlTableで行データが正しく取得できない。


おそらくASP.NETの仕様通りの動作です。コードビハインドで`HtmlTableRow`を追加した場合、自動的に以前のデータは復元されません。

なぜこうなっているかというと、前提としてWebブラウザがサーバーに送信してくる情報が`input`などの特定の要素に限定されるです。なのでASP.NETでは`table`や`span`などを出力する`WebControl`のプロパティを保存するために、[ビューステート](https://msdn.microsoft.com/ja-
jp/library/ms178198%28v=vs.80%29.aspx)と呼ばれる情報を`hidden`に出力し、次のリクエストの初期段階でプロパティを復元しています。しかし`HtmlTable`はそのような動作を意図していない`HtmlControl`であるため、ビューステートから行を復元することはありません。

考えられる対応としては、

  * `GridView`などのより高機能なWebコントロールを使用する
  * 各リクエストで`HtmlTable`に出力する情報を取得する
  * 必要な情報を自分で`ViewState`に入出力して`HtmlTable`の状態を復元する

などがあると思います。


CC BY-SA 3.0
2016-01-30T22:37:28.257
21518
2016-01-30T22:37:28.257
5750
21514
answer