回发后,单选按钮不会被选中

时间:2012-05-02 12:11:34

标签: asp.net webforms postback

我在转发器中有一个项目模板:

   <ItemTemplate>
        <li>
            <input type="radio" 
                   value="<%# GetAssetId((Guid) (Container.DataItem)) %>" 
                   name="AssetId" 
                   <%# SelectAsset((Guid) Container.DataItem) %> />

        </li>
    </ItemTemplate>

我有一种方法可以比较ID并决定是否检查单选按钮。

protected string SelectAsset(Guid uniqueId)
{
    if (uniqueId == GetSomeId()) 
        return "checked=\"checked\"";

    return string.Empty;
}    

SelectAsset被点击,但它没有在帖子后面选择一个单选按钮,但如果我只是刷新页面它确实有效。我在这里做错了什么?

在这里回答:How to display "selected radio button" after refresh?说不可能实现,这是真的吗?

谢谢

更新

如果简单控件没有runat属性,则视图状态似乎不可用。我已经通过使用自定义GroupRadioButton控件解决了这个问题。谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

我建议使用RadioButtonList:

网页代码

<asp:RadioButtonList RepeatLayout="UnorderedList" OnSelectedIndexChanged="IndexChanged" AutoPostBack="true" ID="RadioRepeater" runat="server" />

<asp:Label ID="SelectedRadioLabel" runat="server" />

代码背后

if (!Page.IsPostBack)
{
    /* example adds items manually 
        - you could iterate your datasource here as well */
    this.RadioRepeater.Items.Add(new ListItem("Foo"));
    this.RadioRepeater.Items.Add(new ListItem("Bar"));
    this.RadioRepeater.Items.Add(new ListItem("Baz"));

    this.RadioRepeater.SelectedIndex = this.RadioRepeater.Items.IndexOf(new ListItem("Bar"));
    this.RadioRepeater.DataBind();
}

protected void IndexChanged(object sender, EventArgs e)
{
    this.SelectedRadioLabel.Text = string.Format("Selected Item Text: {0}", this.RadioRepeater.SelectedItem.Text);
}

我假设你只需要选择一个项目。


如评论中所述,它甚至可以访问SelectedItem事件处理程序中的Page_Load

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // previous code omitted
    }
    else
    {
        string foo = this.RadioRepeater.SelectedItem.Text;
    }
}

答案 1 :(得分:1)

如果要在运行时动态创建所有控件(直接从代码中创建),那么事情会有所不同。这是我使用的代码:

网页代码

<input class="textbox-container" type="tel" name="identification" id="identification">

代码背后

<form id="form1" runat="server">
</form>