私は、Subscriptions
というコレクションプロパティを持つASP.Net WebFormsの簡単なカスタムWebコントロールを開発しようとしています。コレクションエディタはVS 2013のデザインビューでカスタムWebコントロールマークアップのエントリを永続化していませんか?
コントロールプロジェクトを正常にコンパイルし、問題なくツールボックスからaspxページに追加できます。私はその後、コレクションエディタの[OK]ボタンをクリックしたときに、私は入力複数のサブスクリプションは、私は行くことができます2013年
のVisual Studioのデザインビュー内のコレクションエディタを使用してSubscriptions
プロパティのエントリを追加するとき
問題があります私は瞬間にいくつかのエントリを入力したにもかかわらず、デザインビューのSubscriptionsプロパティに戻ります。
ASPXでカスタムコントロールのマークアップ
<cc1:WebControl1 ID="WebControl1" runat="server"></cc1:WebControl1>
質問:デザインビューでコントロールのマークアップに表示されないためにコレクションを引き起こしている私のコードで正しくないですか?
カスタムWebコントロールコード
namespace WebControl1
{
[ToolboxData("<{0}:WebControl1 runat=\"server\"> </{0}:WebControl1>")]
[ParseChildren(true)]
[PersistChildren(false)]
public class WebControl1 : WebControl
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? "[" + this.ID + "]" : s);
}
set
{
ViewState["Text"] = value;
}
}
[
Category("Behavior"),
Description("The subscriptions collection"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Visible),
Editor(typeof(SubscriptionCollectionEditor), typeof(UITypeEditor)),
PersistenceMode(PersistenceMode.InnerDefaultProperty)
]
public List<Subscription> Subscriptions { get; set; }
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class Subscription
{
private string name;
private decimal amount;
public Subscription()
: this(String.Empty, 0.00m)
{
}
public Subscription(string nm, decimal amt)
{
name = nm;
amount = amt;
}
[
Category("Behavior"),
DefaultValue(""),
Description("Name of subscription"),
NotifyParentProperty(true),
]
public String Name
{
get
{
return name;
}
set
{
name = value;
}
}
[
Category("Behavior"),
DefaultValue("0.00"),
Description("Amount for subscription"),
NotifyParentProperty(true)
]
public decimal Amount
{
get
{
return amount;
}
set
{
amount = value;
}
}
}
public class SubscriptionCollectionEditor : System.ComponentModel.Design.CollectionEditor
{
public SubscriptionCollectionEditor(Type type)
: base(type)
{
}
protected override bool CanSelectMultipleInstances()
{
return false;
}
protected override Type CreateCollectionItemType()
{
return typeof(Subscription);
}
}