我尝试在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子句-但没有地方可以放置它,因为按钮没有在代码中定义。
有人能告诉我怎么解决这个问题吗?
2条答案
按热度按时间gupuwyp21#
在您尝试发布之前,您希望确保项目能够构建。(编辑--我的错和道歉--我看到您注意到了项目的构建)。
但是,如果你有仅仅这一个错误呢?
您可以通过以下几种方法之一修复此错误
注解掉整个stub(不要删除-您需要里面的代码)
注解掉代码存根(突出显示代码存根ctrl-k、ctrl-c)之后
然后在设计模式下的页面上,双击该按钮即可。
翻回到代码后面,你会看到一个新的事件点击,然后你可以在原始代码存根中剪切+粘贴,并取消命令(突出显示代码,ctrl-k,ctrl-u)(当然你可以总是突出显示,并从菜单中选择注解/取消注解代码)。
此时,错误应消失。
vb能够以两种方式连接Click事件。
那么,第二种方法呢?
从代码存根中删除“HandlesSearch.Click”,然后在标记中简单地键入“onclick="作为按钮的属性。
当你点击“=”时,intel-sense会弹出一个事件选择,如下图所示:
因此,如果从设计器中双击一个按钮,则会得到一个事件+“with events”。
但是,你也可以输入标记onclick=(当你点击“="的瞬间,你就得到了inteli-sense。如果你愿意,你甚至可以使用create new event)。
两种情况下的结果是相同的,只是在一种情况下,“with events”将在页面类级别自动连接事件,因此按钮上不需要“onclick”属性。
当一个按钮被放到一个repeater或者gridview中时,你经常会看到第二种格式(onclick=“some event name”)。在这种情况下,你不能双击按钮,因为你会得到gridview/listview/repeater等事件。所以,要在这样的数据控件中连接一个平面jane按钮,你最终必须在标记中指定onclick事件。
所以,既然原始的确实有“与事件”?
然后在你做任何事情之前,我会先从菜单中尝试一个build-〉rebuild解决方案。(事实上,我会在设计模式下打开窗体,并“修改”窗体(只是在标记中按回车键)。这将迫使页面类重新构建,这样你的错误可能会消失。如果构建错误仍然存在,那么尝试上面的步骤1或2。
我想最简单的方法是从代码后面删除“with events”,然后简单地在标记中添加该按钮的onclick=属性,如前所述,它应该会弹出一个选择列表--包括您的click事件存根(其中“withevents”已被您删除)。
但是,您应该尝试确定这是“网站”还是“网站应用程序”。
因为这是vb,所以如果你作为一个项目打开,那么你会得到一个引用设置页面(这比c#页面好得多)。
这一条:
项目-〉“您的项目名称”属性。
然后您会看到:
使用上面的方法,您可以“即时”查看是否缺少任何引用。但话又说回来,使用构建项目的简单尝试也会告诉您是否缺少引用。
mxg2im7a2#
谢谢,Albert D. Kallal。这没有帮助,但我感谢你的努力,也许它可以帮助其他人。我在搜索按钮上有一个点击事件,如下所示:
我注意到按钮的ID是btnSearch,而不是在Handles子句中查找的ID。我尝试更改Handles子句以匹配按钮,但没有成功。只有当我将按钮的ID更改为“仅搜索”时,它才最终成功发布。
不幸的是,现在我已经得到了服务器上的代码,我有一个不同的错误-但我不会在这里进入。