2009-12-15 37 views
0

爲了創建一個按照我想要的方式輸出HTML的控件適配器(這是我第一次寫適配器),我已經創建了RadioButtonList控件的子類。從RadioButtonList子類中獲取SelectedValue

我面臨的問題是當訪問「SelectedValue」屬性時,我總是得到一個空字符串。如果我切換到超類,我會得到適當的值,所以我真的很困惑......我在這裏錯過了什麼?

我的子類,再簡單不過了:

namespace Internet.Webapp.Controls 
{ 
    public class RadioButtonList : System.Web.UI.WebControls.RadioButtonList 
    { 
    } 
} 

我的適配器也很簡單:

public class RadioButtonListAdapter : System.Web.UI.Adapters.ControlAdapter 
{ 
    // Return a strongly-typed reference 
    public new Internet.Webapp.Controls.RadioButtonList Control 
    { 
     get 
     { 
      return (Internet.Webapp.Controls.RadioButtonList) base.Control; 
     } 
    } 

    protected override void Render(HtmlTextWriter writer) 
    { 
     RadioButtonList radioButtonList = Control; 

     writer.WriteBeginTag("div"); 
     writer.WriteAttribute("id", radioButtonList.ClientID); 
     writer.Write(HtmlTextWriter.TagRightChar); 

     var counter = 0; 
     foreach (ListItem item in radioButtonList.Items) 
     { 
      writer.WriteFullBeginTag("div"); 

      var itemId = radioButtonList.ClientID + "_" + counter++; 

      writer.WriteBeginTag("label"); 

      writer.WriteAttribute("for", itemId); 

      writer.WriteAttribute("value", item.Text); 

      writer.WriteAttribute("class", "long"); 

      writer.Write(HtmlTextWriter.TagRightChar); 

      writer.WriteBeginTag("input"); 

      writer.WriteAttribute("type", "radio"); 

      writer.WriteAttribute("id", itemId); 

      writer.WriteAttribute("name", radioButtonList.UniqueID); 

      writer.Write(HtmlTextWriter.TagRightChar); 

      writer.WriteEndTag("input"); 

      writer.Write(item.Text); 

      writer.WriteEndTag("label"); 

      writer.WriteEndTag("div"); 
     } 
     writer.WriteEndTag("div"); 
    } 
} 

的代碼來填充單選按鈕,列表如下:

var radioButtonList = new Controls.RadioButtonList(); 

optionsList.ForEach(option => radioButtonList.Items.Add(option)); 

並生成html:

<div id="ctl00_MainSection_CordaanForm_ctl14"> 
     <div> 
     <label for="ctl00_MainSection_CordaanForm_ctl14_0" value="male" class="long"> 
      <input type="radio" id="ctl00_MainSection_CordaanForm_ctl14_0" name="ctl00$MainSection$CordaanForm$ctl14"></input> 
      male 
     </label> 
     </div> 
     <div> 
     <label for="ctl00_MainSection_CordaanForm_ctl14_1" value="female" class="long"> 
      <input type="radio" id="ctl00_MainSection_CordaanForm_ctl14_1" name="ctl00$MainSection$CordaanForm$ctl14"></input> 
      female 
     </label> 
     </div> 
    </div> 

回答

1

ASP.NET通過ID標識控件。您在Render方法的重寫中更改了該ID,因此該框架無法再識別它。

+0

感謝您的反饋意見。我修改了Render方法,現在它輸出與普通單選按鈕列表相同的ID。但我仍然無法獲得SelectedValue屬性。任何提示? – Pablo 2009-12-15 12:24:50

+1

很難說,因爲我不知道如何填充RadioButtonList。看到HTML輸出也會有所幫助。 – Oded 2009-12-15 12:32:10

+0

剛剛添加了您詢問的信息。任何幫助將非常感激。 – Pablo 2009-12-15 12:54:23