0

次のようなテーブルがあります。

<table width="650" id="myTable" runat="server">
    <tbody>
        <tr>
            <td><input type="text" /></td>
            <td><input type="text" /></td>
            <td><input type="text" /></td>
            <td><input type="text" />&nbsp;</td>
        </tr>
        <tr>
            <td><input type="text" /></td>
            <td><input type="text" /></td>
            <td><input type="text" /></td>
            <td><input type="text" />&nbsp;</td>
        </tr>
        <tr>
            <td><input type="text" /></td>
            <td><input type="text" /></td>
            <td><input type="text" /></td>
            <td><input type="text" />&nbsp;</td>
        </tr>
    </tbody>
</table>

ここで、そこからデータを取り出して、XML ファイルに保存したいと考えています。問題は、行数が不明なことです。ユーザーは、3 行から n 行の間の任意の行を作成できます。これを解決するために、テーブルから行ごとにデータを引き出す小さなループを作成しました。

// Assume the relevant items are declared and assigned a proper value.

        while (i < myTable.Rows.Count)
        {
            tRow = myTable.Rows[i];

            tNameNode.InnerText = tRow.Cells[0].InnerText;
            tUnitsNode.InnerText = tRow.Cells[1].InnerText;
            tValueNode.InnerText = tRow.Cells[2].InnerText;

            tNewEntryNode.AppendChild(tNameNode);
            tNewEntryNode.AppendChild(tUnitsNode);
            tNewEntryNode.AppendChild(tValueNode);

            tIntermediateNode.AppendChild(tNewEntryNode);

            i++;
        }

これを実行した後に初めて気付いた問題は、入力ボックス内にあるものを取得するのではなく、実際の入力ボックスコードだけを取得することであり、これは私が本当に望んでいるものではありません。

入力ボックス内のコンテンツを取得するにはどうすればよいですか?

4

3 に答える 3

0

これは、あなたがしていることを別の方法で行うための非常に大まかなスケッチですが、長期的には、単純な html を追加するよりも保守しやすいでしょう。追加している行はすべて共通のパターンに従っており、共通の機能を表しているようです。.NET Webフォームには、この目的のために明示的に作成されたものがあります: ユーザーコントロールです。次のようなユーザーコントロールを作成します

<% @ Control Language="C#" ClassName="InputRow" %>
<table>
  <tr>
    <td><asp:textbox ... /></td>
    <td><asp:textbox ... /></td>
    <td><asp:textbox ... /></td>
    <td><asp:textbox ... /></td>
  </tr>
</table>

あなたのメインページに登録してください。次に、入力ボックスを追加する代わりに、

myTable.Controls.Add(new InputRow(...

私の Web フォームは確かに少し錆びており、実際にはテーブル クラスの Controls プロパティに直接追加できない場合があります。それが失敗した場合は、いつでも代わりに Asp:Panel オブジェクトの Controls プロパティに追加できます。

これがより保守しやすい理由は、入力ボックスの取得ロジックをユーザーコントロールにカプセル化し、他のページでも使用できるためです。これらのコントロールのセットをリストで追跡することで、それらすべてをオブジェクト指向的に反復し、構造化された方法でデータを引き出すことができます。

于 2013-06-20T21:15:27.897 に答える
0

私が採用したソリューションは次のようになりました。

    while (i < myTable.Rows.Count)
    {
        tRow = tblCropsAndFeed.Rows[i];

        string tInputBox0 = tRow.Cells[0].Controls[0].ClientID;
        tContent = (HtmlInputText)tRow.FindControl(tInputBox0);
        tNameNode.InnerText = tContent.Value;

        string tInputBox1 = tRow.Cells[1].Controls[0].ClientID;
        tContent = (HtmlInputText)tRow.FindControl(tInputBox1);
        tUnitsNode.InnerText = tContent.Value;

        string tInputBox2 = tRow.Cells[2].Controls[0].ClientID;
        tContent = (HtmlInputText)tRow.FindControl(tInputBox2);
        tValueNode.InnerText = tContent.Value;

        tNewEntryNode.AppendChild(tNameNode);
        tNewEntryNode.AppendChild(tUnitsNode);
        tNewEntryNode.AppendChild(tValueNode);

        tCropsAndFeedNode.AppendChild(tNewEntryNode);

        i++;
    }

私が遭遇した大きな問題は、C# が入力ボックスを DirectControl オブジェクトとして扱っていたため、そこから何かを取得することがほとんど不可能だったことです。追加後

runat="server"

ただし、入力ボックスにはすべて問題ありませんでした。

于 2013-06-21T18:27:45.103 に答える
0

生成されたテキスト ボックスにすべて同じ ID を割り当てることで、生成されたテキスト ボックスのすべてのテキスト値を取得するスクリプトを開発し、スクリプトに ID で値を取得させることができます。次に、C# コードでアクセスできる変数に格納します。

テキストボックスの HTML と、スクリプトを使用して残りのテキストボックスの値を入力できる非表示の TextBox を含む:

<input type="text" class="userTxtBox" />
<input type="hidden" Id="hiddenTxtBox" />

この時点での JQuery の個人的な好み (ただし、どのスクリプトでも同様のことを達成できると確信しています):

$('body').live('input','.userTxtBox', function () {
  $('#hiddenTxtBox').val($('.userTxtBox').val());
});

次に、C# コードで、hiddenTxtBox からテキストを取得できます。

于 2013-06-20T20:21:48.297 に答える