【问题标题】:Single event handler for multiple links/buttons on ASP.NETASP.NET 上多个链接/按钮的单个事件处理程序
【发布时间】:2011-03-03 16:11:00
【问题描述】:

我有一个包含名称集合的下拉列表。我的整个名字列表非常大(超过 2,000 个),所以我想将下拉列表中的名字与以相同字母开头的名字配对。

为此,我希望在同一行上有 26 个链接,每个字母对应一个 ..

A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z

这个想法是用户点击他们感兴趣的字母,然后重新执行获取名称列表的存储过程,只获取那些以点击的字母开头的名称,然后重新生成结果数据集到下拉列表。

让我烦恼的是如何处理创建处理用户“点击”链接所需的所有“点击事件”。 我可以创建 26 个不同的事件处理程序,每个链接一个,但我必须相信还有一种我没有看到的更简单的方法

这里的表单演示是一个链接的点击事件,字母“A”...

      Protected Sub lnkLetterA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lnkLeterA.Click
        Call LoadNamesIntoDropDown("A")
      End Sub

有没有办法创建一个可以处理所有 26 个链接的事件处理程序?谢谢。

附: C# 或 VB.NET 示例很好。在这种情况下,我恰好使用的是 VB.NET。

【问题讨论】:

    标签: asp.net event-handling


    【解决方案1】:

    您可以在一个简单的示例中重用相同的点击处理程序

    protected void HandleLinkClick(object sender, EventArgs e)
    {
        HyperLink link = (HyperLink)sender;
        LoadNamesIntoDropDown(link.Text);
    }
    

    不过,您可以使用大量自动完成样式的解决方案。来自 MS 的免费 http://www.asp.net/ajax/ajaxcontroltoolkit/samples/autocomplete/autocomplete.aspx

    【讨论】:

    • 看起来不错。我如何将每个“链接”连接到这个单一的事件处理程序?
    • @webworm,如果您在设计器中创建链接,只需将OnClick 设置为您的处理程序。如果您以编程方式创建它们,请使用 += 运算符将处理程序附加到 Click 事件。
    【解决方案2】:

    当然,您可以让一个处理程序来统治所有这些。只需将所有链接的Click 事件连接到同一个方法即可。

    您是在代码隐藏中动态创建链接,还是在设计器中创建它们?如果在设计器中完成:

    • 选择一个链接
    • 在属性网格中,切换到事件视图
    • 在点击事件中,从下拉列表中选择您的事件处理程序
    • 对所有链接重复

    在事件处理程序中,使用sender 参数来检查哪些链接被点击,并采取相应的行动。

    【讨论】:

      【解决方案3】:

      根据您的示例使用:

      Protected Sub lnkLetter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lnkLeterA.Click, lnkLeterB.Click, lnkLeterC.Click //etc
              Call LoadNamesIntoDropDown(CType(sender, LinkLabel).Text)
      End Sub
      

      【讨论】:

      • 这是有道理的。 “Handles”关键字是否必须列出正在处理的每个链接?在我的花瓶里应该是 26 岁。
      • 是的。没有办法缩短它的那部分,但它比写出 26 个事件处理程序要好得多!
      猜你喜欢
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多