1

ポストバックでない場合、Page_Load イベントに入力される asp.net リストボックスがあります。ユーザーがasp.netリストボックスからアイテムを選択するたびに、リストボックスから選択されたアイテムの数に基づいてユーザーコントロールをロードする必要があります. 複数のコントロールをロードできました。ただし、私の問題は、新しく追加されたコントロールがポストバックで消えてしまうことです。

ここに私のサンプルコードがあります

 if (!this.IsPostback)
    {
bindListBox();

    }

private void bindListBox()
{
lstAgenyList .DataSource = GetAgenyList();
lstAgenyList.DataTextField = "Id";
lstAgenyList.DataValueField = "Name";
lstAgenyList.DataBind();
}

protected void lstAgenyList_OnSelectedIndexChanged(object sender, EventArgs e)
{

foreach(Item in lstAgenyList.items) {
if(item.Selected)
{
addControls(item.Text, item.Value);
}
}

}

private void addControls(string itemName, string itemValue)
{
var control = this.LoadControl("~/Controls/a.ascx");
control.id= itemName.Trim() + itemValue + "Controls_";
this.agenyListPlaceHolder.Controls.add(control);

}

皆さんへの質問です。asp.net Web フォームでこのようなロジックを実装するための最良のオプションは何ですか。

4

2 に答える 2

0

これは、PlaceHolder と動的に追加されたコントロールに関係しています。

ほぼ同じ質問への回答はこちら: http://forums.asp.net/t/1623719.aspx

基本的に、プレースホルダーのすべてはポストバック時に失われ、非表示フィールド、Request.Form、または ViewState からの PreInit イベント中に再度追加する必要があります。

于 2013-08-23T03:29:13.337 に答える