我遇到了一个问题,即第一个单选按钮的选中更改事件未触发。我启用了ViewState,但问题仍然存在。请参见下面的代码:

<span class="pull-right text-right">
    <label class="inline radio">
        <asp:RadioButton runat="server" ID="rdoViewAll" CausesValidation="false" GroupName="Filter" Text="View All" AutoPostBack="true" EnableViewState="true" Checked="true" />
    </label>
    <label class="inline radio">
        <asp:RadioButton runat="server" ID="rdoViewCurrent" CausesValidation="false" GroupName="Filter" Text="View Current" AutoPostBack="true" />
    </label>
    <label class="inline radio">
        <asp:RadioButton runat="server" ID="rdoViewFuture" CausesValidation="false" GroupName="Filter" Text="View Future" AutoPostBack="true" />
    </label>
</span>


我在Page_Init上设置了选中的更改事件,如下所示:

public void Page_Init(object sender, EventArgs e)
{
    this.rdoViewAll.CheckedChanged += (s, a) =>
    {
        RebindTerms();
    };
    this.rdoViewFuture.CheckedChanged += (s, a) =>
    {
        RebindTerms();
    };
    this.rdoViewCurrent.CheckedChanged += (s, a) =>
    {
        RebindTerms();
    };
}


我注意到的一件事是,当我删除第一个单选按钮上的Checked="true"属性时,CheckedChanged事件将成功触发。但是,我需要在页面加载时默认检查第一个单选按钮。

最佳答案

您最初可以为所有RadioButton保留Checked="false",并使用客户端代码设置所选按钮:

private RadioButton selectedRadioButton;

protected void Page_Load(object sender, EventArgs e)
{
    selectedRadioButton = rdoViewAll;

    if (rdoViewCurrent.Checked)
    {
        selectedRadioButton = rdoViewCurrent;
    }

    if (rdoViewFuture.Checked)
    {
        selectedRadioButton = rdoViewFuture;
    }

    rdoViewAll.Checked = false;
    rdoViewCurrent.Checked = false;
    rdoViewFuture.Checked = false;

    ClientScript.RegisterStartupScript(GetType(), "InitRadio", string.Format("document.getElementById('{0}').checked = true;", selectedRadioButton.ClientID), true);
}


单击任何RadioButton将始终触发CheckedChanged事件。如果在服务器代码的其他部分中需要,则实际选择的RadioButton将存储在selectedRadioButton中。

关于c# - ASP.NET单选按钮检查的更改事件未触发第一个单选按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37738031/

10-10 15:29