首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从RadioButtonList子类获取SelectedValue

从RadioButtonList子类获取SelectedValue
EN

Stack Overflow用户
提问于 2009-12-15 18:59:45
回答 1查看 637关注 0票数 0

我对RadioButtonList控件进行了子类化,以便创建一个control Adapter,它可以完全按照我想要的方式输出HTML (这是我第一次编写适配器)。

我面临的问题是当访问"SelectedValue“属性时,我总是得到一个空字符串。如果我切换到超类,我会得到正确的值,所以我真的很困惑……这里我漏掉了什么?

我的子类非常简单:

代码语言:javascript
复制
namespace Internet.Webapp.Controls
{
    public class RadioButtonList : System.Web.UI.WebControls.RadioButtonList
    {
    }
}

我的适配器也非常简单:

代码语言:javascript
复制
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");
    }
}

填充单选按钮列表的代码如下所示:

代码语言:javascript
复制
var radioButtonList = new Controls.RadioButtonList();

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

和生成的html:

代码语言:javascript
复制
  <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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-15 19:07:50

ASP.NET通过它们的ID来识别控件。您已经在Render方法的重写中更改了该ID,因此框架无法再识别它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1906671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档