Предложение Handles требует обратного вызова WithEvents

Ошибка в CallbackUpdateSchema.Callback

Предложение BC30506 Visual Basic AND ASP.net Handles требует, чтобы переменная WithEvents была определена в содержащем типе или в одном из его базовых типов. Обратный звонок

введите здесь описание изображения

Imports DevExpress.Xpo
Imports DevExpress.Data.Filtering
Imports DevExpress.Xpo.DB

Public Class UpdateSchema
    Inherits System.Web.UI.Page

Dim uow As UnitOfWork

Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
    uow = XpoHelper.GetNewUnitOfWork
End Sub

Protected Sub CallbackUpdateSchema_Callback(source As Object, e As DevExpress.Web.CallbackEventArgs) Handles CallbackUpdateSchema.Callback
    uow.UpdateSchema()
    uow.CreateObjectTypeRecords()
End Sub

End Class

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="UpdateSchema.aspx.vb" %>

<%@  Register assembly="DevExpress.Xpo.v18.2, Version=18.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"  namespace="DevExpress.Xpo" tagprefix="dx" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>   
        <dx:ASPxButton ID="ASPxButtonUpdateSchema" runat="server" AutoPostBack="False" Text="Update Schema">
            <ClientSideEvents Click="function(s, e) {CallbackUpdateSchema.PerformCallback();}" />
        </dx:ASPxButton>
        <dx:ASPxCallback ID="CallbackUpdateSchema" runat="server" ClientInstanceName="CallbackUpdateSchema">
        </dx:ASPxCallback>

    </div>
    </form>
</body>
</html>

person Dea Ananda    schedule 17.01.2020    source источник
comment
Я не думаю, что вы можете обрабатывать события в определении класса. Обработка событий обычно выполняется пользователем объекта. Есть ли переопределяемое свойство, которое вы можете использовать вместо этого?   -  person Robert Richter    schedule 17.01.2020
comment
я не думаю, что есть переопределяемое свойство, которое я могу использовать.   -  person Dea Ananda    schedule 17.01.2020
comment
Я не знаком с этим классом, но вызывается ли событие Init в конструкторе? Если это так, вызовите MyBase.New и Page_Init в своем конструкторе. Теперь мне любопытно - может ли конструктор вызвать событие?   -  person Robert Richter    schedule 17.01.2020


Ответы (1)


Используйте переопределяемый метод OnInit

https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.page.oninit?view=netframework-4.8#System_Web_UI_Page_OnInit_System_EventArgs_

События предназначены для пользователей. Вместо этого для создания подклассов следует использовать переопределяемые методы.

Protected Overrides Sub OnInit(e As EventArgs)
   MyBase.OnInit()
    uow = XpoHelper.GetNewUnitOfWork
End Sub
person Robert Richter    schedule 17.01.2020
comment
спасибо за помощь ... но появляется ошибка: разрешение перегрузки не удалось, потому что ни один доступный не принимает это количество аргументов. в тексте OnInit() и в предложении Handles также требуется ошибка WithEvents. - person Dea Ananda; 17.01.2020
comment
Вы удалили отправителя? - person Robert Richter; 17.01.2020
comment
что это такое? - person Dea Ananda; 20.01.2020
comment
В переопределениях OnMethod нет параметра отправителя, как в событии Method. OnInit имеет только e. Также убедитесь, что вы удалили дескрипторы MyBase.Init после объявления подпрограммы. - person Robert Richter; 21.01.2020
comment
о нет, я не удаляю отправителя, но тоже ошибка :( - person Dea Ananda; 21.01.2020
comment
Думаю, я ввел вас в заблуждение. Я думаю, вам нужно было использовать Handles MyBase.Init вместо Me.Init в исходном коде. - person Robert Richter; 23.01.2020