asp:RadioButtonList在加载时未设置正确的选定项

时间:2010-04-13 08:29:40

标签: asp.net controls c#-3.0

我有这段代码:

<asp:RadioButtonList ID="rblExpDate" runat="server" >
    <asp:ListItem Selected="True" Text="No expiration date"></asp:ListItem>
    <asp:ListItem Text="Expires on:"></asp:ListItem>
</asp:RadioButtonList>

我希望在页面加载时始终标记第一个选项(“无过期日期”)。 但是,如果用户标记第二个选项并重新加载,则选择第二个选项,即使我在页面加载时执行此操作:

rblExpDate.Items[0].Selected = true;
rblExpDate.SelectedIndex = 0;

感谢您的帮助!

5 个答案:

答案 0 :(得分:1)

在onload of body标签上调用此函数

<body bottomMargin=0 leftMargin=0 topMargin=25 onload=aa() rightMargin=0>
头标记下的

<script language=Javascript>
function aa() {document.forms[0].item('rblExpDate')[1].disabled=true;}
</script>

答案 1 :(得分:1)

我遇到了同样的问题。我在页面PostBack上发现我的radioButtonList仍然保留了之前的所有ListItems selected property。基本上,之前选择的RadioButtonList的最后一项将显示为您在网页上选择的项目。因此,在您的情况下,一旦用户选择第二个项目,该项目具有属性checked=checked,尽管您的代码将第一个项目设置为已选中。看看你的View Page Source,你会看到两个ListItem都被检查了。

我的解决方案:在PagePostBack上将其他ListItem Selected propety值设置为false,如下所示:

rblExpDate.Items[0].Selected = true;
rblExpDate.Items[1].Selected = false;

这将删除第二项上的Checked属性。

希望有人帮助。也许有人有更好的方法。

答案 2 :(得分:0)

您确定您的代码不在回发检查范围内吗?

        if (!Page.IsPostBack)
        {
            rblExpDate.Items[0].Selected = true;
            rblExpDate.SelectedIndex = 0;
        }

更重要的是,这听起来像一个听起来不太可用的奇怪要求。如果你总是要覆盖它,为什么有一个选项?

答案 3 :(得分:0)

最可能发生的事情是在Page_Load上执行的代码首先运行,设置所需的元素。之后,RadioButtonList的SelectedIndexChanged事件触发并从ViewState获取所选项,覆盖代码所执行的操作。但是你必须调试它。

答案 4 :(得分:0)

我选择的解决方案是在Javascript(mootools)中:

window.addEvent('domready', function() {
         $("rblExpDate_0").checked = true;
});

(我放弃了.net方面)

谢谢你的帮助@Slavo和@Daniel Dyson。