为什么此事件会异步触发?

时间:2015-05-05 21:32:08

标签: c# asynchronous sharepoint-2010 radio-button

我已经有了这个代码来防止两个相反的无线电接头被检查:

RadioButton rbUSCitizenOrPermResY = null;
RadioButton rbUSCitizenOrPermResN = null;

. . .

rbUSCitizenOrPermResY = new RadioButton
{
    CssClass = "finaff-webform-field-input"
}; // doesn't allow assignment to CheckedChanged above
rbUSCitizenOrPermResY.CheckedChanged += new EventHandler(rbUSCitizenOrPermResY_Changed);

. . .

private void rbUSCitizenOrPermResY_Changed(object sender, EventArgs e)
{ 
    if (rbUSCitizenOrPermResN.Checked)
    {
        rbUSCitizenOrPermResN.Checked = false;
    }
}

因此,如果选中“是”单选按钮,如果选中“否”单选按钮,则取消选中“否”单选按钮。

推测。

实际上,此事件处理程序,但是在单击单选按钮时则不会。相反,在我点击“保存”按钮后,它会稍后触发。这是一个异步事件处理程序,它只是在它感觉到的时候醒来吗?如果是这样,我怎样才能让它“挺直向前飞”/“塑造或出货”?

1 个答案:

答案 0 :(得分:1)

我花了一段时间来弄清楚你在描述什么,因为我习惯于考虑客户端,而不是服务器端。但是既然你在做服务器端,我认为你需要为你的单选按钮引入某种分组结构。我刚刚尝试了一个示例应用程序,其中我使用了包含ListItems的RadioButtonList(相反,不直观,它们不称为Radiobuttons)。但是使用RadioButtonList对它们进行分组,它们在客户端表现正确,即它们是独占的。单击一个取消选择另一个。这是我使用的标记(这适合你的场景吗?):

<asp:RadioButtonList ID="RadioButtonList1" runat="server">
    <asp:listItem ID="rad1" runat="server"></asp:listItem>
    <asp:listItem ID="rad2" runat="server"></asp:listItem>
</asp:RadioButtonList>

listitem控件在设计器文件中被翻译为System.Web.UI.WebControls.ListItem

顺便说一句,我在Visual Studio中将其模拟为Web窗体应用程序。我没有安装任何Sharepoint的东西,但我认为原理是一样的(我希望)。

生成的HTML最终看起来像这样:

<table id="MainContent_RadioButtonList1">
    <tr>
        <td><span ID="rad1"><input id="MainContent_RadioButtonList1_0" type="radio" name="ctl00$MainContent$RadioButtonList1" value="" /></span></td>
    </tr>
    <tr>
         <td><span ID="rad2"><input id="MainContent_RadioButtonList1_1" type="radio" name="ctl00$MainContent$RadioButtonList1" value="" /></span></td>
    </tr>
</table>