0

次の問題があります。

asp:textboxページ上に runat サーバーがあり、ID は sayです。txt このテキスト ボックスは にあります<div>。特別なことは何もありません。すなわち:

<div>
 <asp:TextBox id="txt" runat="server"></asp:TextBox>
</div>

問題は、対応するボタンを押すとdivを2倍(コピー)するJavaスクリプトがあることです。これは仕様によるものです。それは意図されています。

保存を押してもページの下部にある asp:Button を押すと、2 つの結果が返されるため、必要な値が見つかりません。

コードビハインド:

(Textbox) blah = (Textbox)senderbutton.FindControl("txt");

string test = blah.text

しかし、結果は本質的に->「テキストボックスの値、テキストボックスの値」です

つまり、2回あります。私は次のことを行うことでこれを回避しました:

string[] test = blah.text.split(new[] { ',' })

そして、配列の2番目の値などを呼び出すだけです。

しかし、今、私はこの状況にありますが、問題は、ユーザーが「、」を含む文字列を入力できることです。したがって、分割はがらくたになります....

では、ID を持つコントロールを見つけることはできますが、コード ビハインドで n 番目に出現するものだけを見つけることができますか?

4

4 に答える 4

1

入力コントロールのコピーごとに異なる名前( txt0、txt1 ...など)を付ける必要があるようです。これは、aspボタンのクライアントクリック(フォーム送信前)でjavascriptを使用して行うことができます

--Javascriptメソッド

    function ModifyName() {
        var x = 0;
        $("input[name='txt']").each(function () {
            $(this).attr("name", $(this).attr("name") + x);
            x++;
        });
    }

--asp :Button

<asp:Button ID="btnSubmit" runat="server" Text="Submit" 
   OnClientClick="ModifyName();" onclick="btnSubmit_Click" />

したがって、背後のコードでは、次のような値を取得できます...

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        var resultArr = Request.Form.AllKeys.Where(x => x.Contains("txt"))
            .Select(x => Request.Form[x]).ToArray();
    }
于 2012-10-26T09:17:08.527 に答える
0

最善の解決策は、js で div をコピーしないことです。「これは設計によるものです。意図されたものです。」(私はそれを本当に疑っていますが)と言ったので、いくつかの代替ソリューションがあります:

(1) フォームのデフォルトの送信動作を使用しないでください。つまり、保存ボタンのクリック(js)イベントで、データをフォームに整理してから送信します。

(2) 2 番目の (コピーされた) テキストボックスの ID を元の ID とは異なるように変更し、分離コードでデータを取得します。

于 2012-10-26T08:08:43.100 に答える
0

あまり良い解決策ではありませんが、ポストバック時に Request.Form コレクションを直接調べて、動的に追加されたテキスト ボックス フィールドを処理するコードを記述できます。

于 2012-10-26T08:01:11.197 に答える
-1

コードビハインドからコントロールFindControlに直接アクセスできるのに、メソッドを使用してコントロールを見つける理由がわかりません。txt

簡単に結果が出せる

String test = txt.Text;
于 2012-10-26T08:07:40.160 に答える