- PR -

ListBoxがPostBack時に空になってしまうことについて

1
投稿者投稿内容
会議室デビュー日: 2007/06/05
投稿数: 2
投稿日時: 2007-06-05 17:01
はじめて書き込みさせていただきます。
vs2005を使用してWebアプリの開発をしています。

vbscriptを使用し、ListBoxにitemを追加するのですが、
PostBack時にvbscriptで追加したitemが空になってしまいます。
これを回避するために、ListBoxを継承した新しいmycoListBoxコントロールを過去ログを元に作成したのですが、このコントロール使用してもPostBack時にListのitemが空になってしまいます。
解決方法や、間違いの指摘がありましたら教えて下さい。

--------以下mycoListBoxのソース--
[DefaultProperty("ListBox")]
[ToolboxData("<{0}:mycoListBox runat=server></{0}:mycoListBox>")]
public class mycoListBox : System.Web.UI.WebControls.ListBox
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]

protected override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
String value = postCollection.GetValues(postDataKey)[0];

if ((value != null) && (this.Items.FindByValue(value) == null))
{
this.Items.Add(value);
}

return base.LoadPostData(postDataKey, postCollection);
}
}

todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2007-06-05 19:02
>間違い

クライアントで追加されたitemをサーバに通知する仕組みはありません。
従ってサーバ側だけでは解決できません。

>解決方法

追加したitemをサーバに通知する手段を実装する必要があります。
クライアントサイドで追加したitemの情報を隠しフィールドに保存しておき、サーバ側のLoadPostDataで復元するとか。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-06-05 19:07
ListBox のアイテムはサーバ側に値がポストされないので、クライアントスクリプト側で追加したアイテムをサーバー側で知ることはできません。
何が追加されたかを知るためには hiddent などに隠してポストする必要があります。

_________________
かるあ のメモスニペット
会議室デビュー日: 2007/06/05
投稿数: 2
投稿日時: 2007-06-05 19:45
かるあさん
todoさん
レスありがとうざいます。

ListBoxのitemをpostすることはできない仕様なのですね。
参考になりました。ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)