【问题标题】:ASP.Net event only being raised every other time?ASP.Net 事件每隔一段时间才会引发一次?
【发布时间】:2011-01-25 09:24:27
【问题描述】:

我有一个 ASP.Net Web 用户控件,它代表列表中的单个条目。为了允许用户对项目重新排序,每个项目都有用于在列表中向上或向下移动项目的按钮。单击其中一个会向父页面引发一个事件,然后父页面会随机播放占位符控件中的项目。

列表条目中的代码片段:

Public Event UpClicked As System.EventHandler
Protected Sub btnUp_Click(ByVal sender As Object, ByVal e As System.EventArgs)
              Handles btnUp.Click
    RaiseEvent UpClicked(Me, New EventArgs())
End Sub

以及父容器:

    rem (within the code to add an individual item to the placeholder)
    AddHandler l_oItem.UpClicked, AddressOf UpClicked


Protected Sub UpClicked(ByVal sender As Object, ByVal e As EventArgs)
    MoveItem(DirectCast(sender, ScriptListItem), -1)
End Sub

它最初在测试中看起来就像每隔一次到达 UpClicked 的发件人的值(由其属性验证)是一个相邻的 ListItem,不是我刚刚点击的那个 - 第一个点击总是错误的,然后第二次为正确控制。

目前,测试似乎表明按钮的点击事件每隔一段时间就会被忽略。控件中的单击事件上的断点根本没有被命中,尽管事件肯定正在建立。

为什么?

【问题讨论】:

  • 可以发一下网页表单代码吗?
  • 你在追求哪一点?
  • 它只是按顺序将项目添加到占位符控件中,它们以正确的顺序进入。我已经检查过这些按钮是我所期望的,并且在单击时它们是,但并非总是在收到单击时。

标签: asp.net vb.net events webusercontrol webusercontrols


【解决方案1】:

要冒泡事件,您可以让用户控件定义事件:

public event SomeEventHandler UpClicked;

引用这个:

public class SomeEventArgs {
   public ListItem Selected { get; set; }
}
public delegate void SomeEventHandler(object sender, SomeEventArgs e);

您可以在此处存储多个属性;您可以存储任意数量的详细信息。但是您可以使用此事件参数将所有信息传递给页面......问题可能是您如何调用事件;确保在您的用户控件中执行以下操作:

public event SomeEventHandler UpClicked;

protected void OnUpClicked(SomeEventArgs e)
{
   if (UpClicked != null) UpClicked(this, e);
}

protected void button_click(object sender, EventArgs e)
{
    this.OnUpClicked(new SomeEventArgs { Selected = this.list.SelectedItem; });
}

HTH。

【讨论】:

  • 这是一个 VB.Net 项目,但这就是我所拥有的(抱歉格式化) - Public Event UpClicked As System.EventHandler Public Event DownClicked As System.EventHandler Protected Sub btnUp_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUp.Click RaiseEvent UpClicked(Me, New EventArgs()) End Sub 上面的代码,在明显的严格轮换中交替地得到正确的对象和错误的对象...
  • 不确定我是否理解您的意思? ScriptListItem 是用户控件吗?向上/向下单击的事件应该传递什么以便您可以更改顺序?您是在使用 ASP.NET ListItem 类还是您自己的自定义类?
  • ScriptListItem 是用户控件的名称,它具有一系列属性——它与 ListItem 类无关。 UpClicked 事件应该将 Me 作为第一个属性传递,但 Me 交替作为正确的行和相邻的行通过检查其常规属性。
  • 这让我有点困惑,你的意思是“我在检查其一般属性时交替出现正确的行和相邻的行”......你能更新你的帖子吗将其包含在代码示例中吗?
  • 经过进一步测试,今天问题澄清了,遗憾的是仍然没有解决方案。
猜你喜欢
  • 1970-01-01
  • 2021-08-16
  • 2010-10-23
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多