我在转发器中有一个项目模板:
<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控件解决了这个问题。谢谢你的帮助。
答案 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>