为什么这个事件异步触发?
Why does this event fire asynchronously?
我有这段代码可以防止同时检查两个相反的单选按钮:
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;
}
}
因此,如果选中 "Yes" 单选按钮,则在选中 "No" 单选按钮时取消选中 "No" 单选按钮。
据说。
实际上,此事件处理程序 是 进入的,但不是在单击单选按钮时进入的。相反,它会在我单击 "Save" 按钮后触发。这是一个异步事件处理程序,它只是在需要时唤醒吗?如果是这样,我怎样才能得到它"straighten up and fly right"/"shape up or ship out"?
我花了一段时间才弄明白你在描述什么,因为我习惯于在客户端而不是服务器端考虑这些东西。但是因为你在做服务器端,我认为你需要为你的单选按钮引入某种分组结构。我刚刚尝试了一个示例应用程序,其中我使用了包含 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>
我有这段代码可以防止同时检查两个相反的单选按钮:
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;
}
}
因此,如果选中 "Yes" 单选按钮,则在选中 "No" 单选按钮时取消选中 "No" 单选按钮。
据说。
实际上,此事件处理程序 是 进入的,但不是在单击单选按钮时进入的。相反,它会在我单击 "Save" 按钮后触发。这是一个异步事件处理程序,它只是在需要时唤醒吗?如果是这样,我怎样才能得到它"straighten up and fly right"/"shape up or ship out"?
我花了一段时间才弄明白你在描述什么,因为我习惯于在客户端而不是服务器端考虑这些东西。但是因为你在做服务器端,我认为你需要为你的单选按钮引入某种分组结构。我刚刚尝试了一个示例应用程序,其中我使用了包含 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>