【问题标题】:ASP.Net website 'Error BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types' on publish发布时 ASP.Net 网站“错误 BC30506:Handles 子句需要在包含类型或其基本类型之一中定义的 WithEvents 变量”
【发布时间】:2022-11-08 23:14:45
【问题描述】:

我正在尝试在 Visual Studio 2019 .Net Framework v4.5.1 中发布一个网站(或 webapp,不知道如何判断它是哪一个)。它构建没有问题,但当我尝试发布时总是抛出错误:

Error BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.

错误指的是这个按钮:

<asp:Button ID="btnSearch" CssClass="subButton" runat="server" />

这在后面的代码中触发了这个:

Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Search.Click

这个按钮已经在我们的现场网站上运行良好,并且多年来没有更改,所以我不明白为什么它突然成为一个问题。我在网上看到的所有答案都建议添加一个 WithEvents 子句 - 但由于该按钮未在代码中定义,因此无处可放。

谁能建议我如何解决这个问题?

【问题讨论】:

    标签: asp.net visual-studio-2019


    【解决方案1】:

    在尝试发布之前,您需要确保项目已构建。 (编辑——我的错误和道歉——我看到你注意到了项目的构建)。

    但是,如果您只有这一个错误?

    您可以通过以下几种方法之一修复此错误

    注释掉整个存根(不要删除 - 你需要里面的代码)

    注释掉代码存根后(突出显示代码存根 ctrl-k、ctrl-c)

    然后在设计模式的页面上,只需双击按钮。

    翻到后面的代码,你会看到一个新的事件点击,然后你可以在原始代码存根中剪切+粘贴,然后取消命令(高亮代码,ctrl-k,ctrl-u)(当然你总是可以高亮,并从菜单中选择评论/取消评论代码)。

    到那时,错误应该消失了。

    vb 能够以两种方式连接点击事件。

    那么,第二种方式呢?

    从代码存根中删除“Handles Search.Click”,然后在标记中,简单地键入按钮的属性“onclick=”。

    当您点击“=”时,intel-sense 应该会弹出一个事件选择。像这样:

    所以,如果从设计师那里,你双击一个按钮,那么你会得到一个事件+“带有事件”。

    但是,您也可以输入标记 onclick=(当您点击“=”时,您会获得智能感知。如果您愿意,您甚至可以使用创建新事件)。

    两种情况下的结果都是相同的。只是在一种情况下,“with events”将在页面类级别自动连接事件,因此按钮上不需要“onclick”属性。

    当按钮被放置在中继器中时,您通常会看到第二种格式(onclick="some event name"),或者说 gridview。在这些情况下,您不能双击该按钮,因为您获得了 gridview/listview/repeater 等事件。因此,要在此类数据控件中连接平面简按钮,您最终必须在标记中指定 onclick 事件。

    那么,既然原版确实有“事件”?

    然后在你做任何事情之前,我会先从菜单中尝试一个 build->rebuild 解决方案。 (事实上​​,我会在设计模式下打开表单,然后“弄脏”表单(只是在标记中按回车键)。这将强制页面类重新构建,因此您的错误很可能会消失。如果构建错误仍然存在,然后尝试上面的步骤 1 或 2。

    我想最简单的方法是从后面的代码中删除“带有事件”,然后在标记中简单地添加该按钮的 onclick= 属性,并且如前所述,它应该弹出一个选项列表 - 包括您的点击事件存根( “withevents”已被您删除)。

    但是,您应该尝试确定这是“网站”还是“网站应用程序”。

    由于这是 vb,所以如果您作为项目打开,那么您会得到一个参考设置页面(它比 c# 好得多)。

    这个:

    项目->“您的项目名称”属性。

    然后你会看到这个:

    有了上面,您可以“立即”查看是否缺少任何参考。但是话又说回来,使用构建项目的简单尝试也会告诉您是否缺少引用。

    【讨论】:

      【解决方案2】:

      谢谢,Albert D. Kallal。这并没有帮助,但我很感激你的努力,也许它可以帮助别人。我在搜索按钮上有一个点击事件,如下所示:

      Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Search.Click
      

      我注意到按钮的 ID 是 btnSearch,它没有在 Handles 子句中查找。我尝试更改 Handles 子句以匹配按钮,但它不起作用。只有当我将按钮的 ID 更改为仅搜索时,它才最终成功发布。

      不幸的是,现在我在服务器上得到了代码,但我遇到了一个不同的错误 - 但我不会在这里讨论。

      【讨论】:

        猜你喜欢
        • 2018-10-17
        • 2011-12-02
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2019-04-19
        • 1970-01-01
        相关资源
        最近更新 更多