2

次の機能を作成する必要があり、複数のポストバックに関する情報を保存する最良の方法を探しています。

たとえば、「私が訪れた場所」という質問に関連する TextBox があるとします。一度 TextBox が最初の読み込みで読み込まれます。その下に「別の場所を追加」ボタンがあります。これはポストバックされ、最初の TextBox の下に別の TextBox が追加されます。これは x 回実行できます。

私が持っている質問は、ユーザーがページに追加したコントロールの数をどのように保存/記憶するかです。この読み込みは Init イベントで行う必要があり、ViewState はこの時点では読み込まれていません

編集*:

ユーザーが保存すると、いくつかの検証が行われるため、検証が失敗した場合は、投稿されたデータとともにすべての TextBox を表示する必要があることを忘れていました。

4

3 に答える 3

1

フォームで有限数のテキスト ボックスのみを許可する場合は、Page_Init 中にその数のテキスト ボックスを作成し、可視性を false に設定して、ブラウザーでレンダリングされないようにすることができます。ボタンのクリック イベントで、最初の非表示のテキスト ボックスを見つけて、可視性を true に変更できます。このようなもの

protected void Page_Init(object sender, EventArgs e)
{
    for (int i = 0; i < 20; i++)
    {
        this.Form.Controls.Add(new TextBox() { Visible = false });
    }
}

protected void addTextboxButton_Click(object sender, EventArgs e)
{
    TextBox tb = this.Form.Controls.OfType<TextBox>().FirstOrDefault(box => box.Visible == false);
    if (tb != null) tb.Visible = true;
}

このアプローチを使用すると、ボタンがクリックされるたびにテキストボックスが 1 つずつ表示され、ポストバック値が保持されます。

明らかに、いくつかのリテラル コントロールを定義してテキスト ボックスの改行とプロンプトを作成したり、ユーザーが設定した制限に達したときにメッセージを表示したりするなど、さらに作業を追加する必要があります。

于 2010-06-25T02:08:06.580 に答える
0

いくつか考えた後、与えられた答えを考慮して、この解決策を思いつきました。

コントロールのプレースホルダーには、ページに追加されたコントロールの数を格納する非表示の入力フィールドがあります。次に、Initで、次のコードを使用できます(テストのみ)。

protected override void OnInit(EventArgs e)
{
    int i = 0;
    i = Int32.Parse(hdnTestCount.Value);

    if(Request.Params[hdnTestCount.UniqueID] != null)
    {
        i = Int32.Parse(Request.Params[hdnTestCount.UnitueID]);
    }

    for (int j = 1; j <= i; j++)
    {
         TextBox txtBox = new TextBox();
         txtBox.ID = "Test" + j.ToString();
         plhTest.Controls.Add(txtBox);
    }
}

protected void btnAdd_OnClick(object sender, EventArgs e)
{
    int i = 0;
    i = Int32.Parse(hdnTestCount.Value) + 1;

    TextBox txtBox = new TextBox();
    txtBox.ID = "Test" + i.ToString();
    plhTest.Controls.Add(txtBox);
    hdnTestCount.Value = i.ToString();
}

もちろん、これに関する唯一の問題は、ユーザーが非表示フィールドで値を操作できることです。他の唯一のオプションは、セッションを使用することです。これは、ページがこのように更新されると、フォームが自動的にリセットされるため、使用したくありません。これが発生するはずです。

于 2010-06-25T03:30:08.350 に答える
0

オプション 1 : Session を使用して Textboxes の数を格納できます...

オプション 2 : ページの Load イベントにコントロールを追加することもできます。ここで、ViewState 情報が得られます。

ここにあなたを助けることができるリンクがあります...

ダイナミックコントロールを真に理解する

ViewState を真に理解する

于 2010-06-25T02:17:50.493 に答える