2

を使用してASP.NET/C#います。

私のページの 1 つで、私は を使用Update PanelしてUpdate PanelLinkButtonます。TextboxUpdate Panel

Textboxes動的に作成され、正常に動作しています。ただしclick、同じLinkbuttonように next を追加するTextboxと、前の値Textboxが失われます。

のせいだと思いますPostBack

を作成するための私のコードは次のとおりTextboxesです。

protected void linkAddAmount_Click(object sender, EventArgs e)
        {
            int count = 0;

            if (ViewState["ButtonCount"] != null)
            {
                count = (int)ViewState["ButtonCount"];
            }

            count++;
            ViewState["ButtonCount"] = count;

            for (int i = 0; i < count; i++)
            {
                AmountUpdatePanel.ContentTemplateContainer.Controls.Add(new LiteralControl("<span>From:&nbsp;</span>"));
                TextBox textbox1 = new TextBox();
                textbox1.ID = "txtAmountFrom" + i;
                textbox1.Attributes.Add("class", "ShortTextbox");
                AmountUpdatePanel.ContentTemplateContainer.Controls.Add(textbox1);
            }
        }

誰でもこの問題を解決するのを手伝ってもらえますか?

どんな提案でも大歓迎です。

4

3 に答える 3

3

おそらく、この MSDN の記事で、この問題が発生する理由が説明されています: Dynamic Web Server Controls and View State

この古い記事で適切な説明を見つけることができます: Dynamic Web Controls, Postbacks, and View State

動的コントロールが各ページ要求で作成される場合、それらは前の要求から ViewState 値を取得するため、読み込み時にコントロールを作成し、非表示にして、ユーザーが何かを行うときに表示します。

また、設計時に作成された、ポストバック後に値が失われるというこの動作を持つコントロールがある場合は、どこかで EnableViewState プロパティをfalseに設定していないことを確認してください。

そして、そのIdに沿ってコントロールのNameを設定する必要があります。名前はフォーム送信で使用されます。これは、異なる ID で同じ名前のラジオ ボタンのリストがある場合に最もよく見られます。送信すると、ラジオ ボタンの名前をキーとし、選択したラジオ ボタンの ID を値とするペアが送信されます。

于 2012-08-07T08:54:54.960 に答える
1

Postback では、これらのタイプのコードを呼び出して Textbox の値を取り戻すことができます。

txtPartName.Text = Request.Form[txtPartName.UniqueID];

初めてロードする場合は、上記のように値を設定する前にコードを下に置くことができます。これらの行は、値が DB または外部から初めてバインドされる場合に役立ちます。

if (!string.IsNullOrEmpty(Request.Form[txtPartName.UniqueID]))
于 2013-11-15T15:28:24.950 に答える
0

更新パネルでの動的コントロールの使用に関する情報は、ここのスタックにあります。

UpdatePanel内に動的に作成されたコントロール?

次のように痰からの答えを実装しましたか?

protected void linkAddAmount_Click(object sender, EventArgs e)
        {
            int count = 0;

            if (ViewState["ButtonCount"] != null)
            {
                count = (int)ViewState["ButtonCount"];
            }

            count++;
            ViewState["ButtonCount"] = count;

            for (int i = 0; i < count; i++)
            {
                AmountUpdatePanel.ContentTemplateContainer.Controls.Add(new LiteralControl("<span>From:&nbsp;</span>"));
                TextBox textbox1 = new TextBox();
                textbox1.ID = "txtAmountFrom" + i;
                textbox1.Attributes.Add("class", "ShortTextbox");

            if (!string.IsNullOrEmpty(Request.Form["txtAmountFrom" + i.ToString()]))
                {
              textbox1.Text = Request.Form["txtAmountFrom" + i.ToString()];
                }

                AmountUpdatePanel.ContentTemplateContainer.Controls.Add(textbox1);
            }
        }
于 2012-08-07T07:59:43.877 に答える