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>
感謝您的反饋意見。我修改了Render方法,現在它輸出與普通單選按鈕列表相同的ID。但我仍然無法獲得SelectedValue屬性。任何提示? – Pablo 2009-12-15 12:24:50
很難說,因爲我不知道如何填充RadioButtonList。看到HTML輸出也會有所幫助。 – Oded 2009-12-15 12:32:10
剛剛添加了您詢問的信息。任何幫助將非常感激。 – Pablo 2009-12-15 12:54:23