我想做一個從DropDownList繼承的自定義服務器控件。我給控件一個包含一些鍵/值對的XML輸入,我的控件將它們顯示爲DropDownList。 我做在覆蓋列表中的項目Render方法是這樣的:如何在(asp.net)自定義服務器控件中維護狀態?
foreach (XElement child in root.Elements("Choice"))
{
string title = child.Element("Title").Value;
string score = child.Element("Score").Value;
item = new ListItem();
item.Text = title;
item.Value = score;
this.Items.Add(item);
}
的問題是,當在列表中的用戶選擇和項目,並在頁面回發,所選擇的項目被丟失,列表使用默認數據重新初始化。
有沒有人有任何想法如何保持選定的項目,即保持狀態?
下面是完整的源:
public class MultipleChoiceQuestionView2 : DropDownList
{ 公共MultipleChoiceQuestionView2() :鹼() { }
保護覆蓋無效渲染(HtmlTextWriter的作家) { writer.RenderBeginTag (HtmlTextWriterTag.Table); writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);如果(!String.IsNullOrEmpty(this.Contents)) { XElement root = XElement.Parse(this.Contents);
if(root.HasAttributes) this.NoOfChoices = Int32.Parse(root.Attribute(「ItemCount」)。Value); }
this.Items.Clear(); this.Style.Add(「width」,「100px」); this.Style.Add(「font-family」,「Tahoma」); this.Items.Clear(); ListItem item = new ListItem(); item.Text =「」; item.Value =「0」; this.Items.Add(item);
的foreach(的XElement兒童root.Elements( 「選擇」)) { 串標題= child.Element( 「標題」)值。 string score = child.Element(「Score」)。Value; item = new ListItem(); item.Text = title; item.Value =分數;
this.Items.Add(item);
} } #endregion base.Render(作家); writer.RenderEndTag();
if(this.Required) { RequiredFieldValidator rfv = new RequiredFieldValidator(); rfv.ControlToValidate = this.ID; rfv.InitialValue =「0」; rfv.Text =「*」; (!String.IsNullOrEmpty(this.ValidationGroup)) rfv.ValidationGroup = this.ValidationGroup; } writer.RenderBeginTag(HtmlTextWriterTag.Td); rfv.RenderControl(writer); 作家。RenderEndTag(); }
writer.RenderEndTag(); writer.RenderEndTag(); } #地區屬性 public string目錄 { 得到 { return ViewState [「Contents」] == null? 「」:ViewState [「Contents」]。ToString(); } set { ViewState [「Contents」] = value; } }
private int mNoOfChoices; public int NoOfChoices { get {return mNoOfChoices; } set {mNoOfChoices = value; } }
private string mValidationGroup; public string ValidationGroup { get {return mValidationGroup; } set {mValidationGroup = value; }}
公共字符串SelectedChoice { 得到 { 回報 「」; } }
private bool mRequired = false; public bool必需 { get {return mRequired; } set {mRequired = value; }}
#endregion }
在此先感謝。
這裏是一個很好的回答,您可以檢查[ASP.NET控件項目集合不IList的科技工作] [1] [1]:http://stackoverflow.com/questions/31947655/ASP淨控制項目信息收集犯規工作與 - ilistt – 2015-08-14 09:36:12