【问题标题】:Why does this event fire asynchronously?为什么这个事件异步触发?
【发布时间】:2015-05-07 06:57:25
【问题描述】:

我有这个代码来防止两个相反的单选按钮都被检查:

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;
    }
}

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

据说。

实际上,此事件处理程序输入,但在单击单选按钮时未输入。相反,它会在我单击“保存”按钮后触发。这是一个异步事件处理程序,只要感觉它就会唤醒吗?如果是这样,我怎样才能让它“伸直并正确飞行”/“整形或出货”?

【问题讨论】:

  • 你可以通过将它们放在同一个 GroupBox 或 Panel 中来强制它们相互排斥吗?
  • 我不知道 html 中有这样的结构(这段代码在“幕后”创建 html - 它存在吗?
  • 所以,我在想发生的事情是只有当您单击保存时才会将数据发布到服务器,所以只有这样才会处理 CheckChanged 事件。这是第一句话:“当 Checked 属性的值在发送到服务器的帖子之间发生变化时发生。” msdn.microsoft.com/en-us/library/… 的 CheckChanged 事件的描述。因此,如果当您单击单选按钮时没有任何内容发布到服务器,则不会发生任何事情。但是当您单击保存时,服务器会检查状态。这有意义吗?
  • 是的,有道理,但是让用户看到两个单选按钮“已选中”会让人困惑

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


【解决方案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>

【讨论】:

  • 我刚刚添加了生成的 HTML,因此您可以看到控件在客户端具有类型 radio,即使它们在服务器端具有类型 listItem。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 2020-02-18
  • 1970-01-01
  • 2016-12-11
相关资源
最近更新 更多