【发布时间】:2019-07-10 16:09:48
【问题描述】:
我正在尝试在 ASP.NET 中处理多个客户端回调,我正在关注这个article
我已将 C# 代码转换为我的环境 VB.NET/ASP.NET。
使用的命名空间是 SmartSoft.Web.UI.WebControls
在名为 ClientCallback 的类中,我有这段代码
Public Delegate Function OnRaiseCallbackEvent(ByVal eventArgument As String) As String
Public Event Raise As OnRaiseCallbackEvent
编译器用以下错误消息标记事件声明:
不能使用具有返回类型的委托类型来声明事件。
我尝试遵循解决方案here 但如果声明
Public Raise As OnRaiseCallbackEvent
我在另一个名为 SampleCompositeControl
的类中收到另一个错误我在哪里
Private button1 As Button
Private button1Callback As ClientCallback
Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs)
......
End Sub
Protected Overrides Sub CreateChildControls()
button1 = New Button With {.ID = "Button1",.Text = "Button 1",
.OnClientClick = "button1Clicked('', '', callbackComplete);return false;"}
Controls.Add(button1)
button1Callback = New ClientCallback With {
.ID = "button1Callback"}
button1Callback.Raise += AddressOf button1Callback_Raise
..........
End Sub
Protected Overrides Sub RenderContents(ByVal writer As HtmlTextWriter)
........
End Sub
Private Function button1Callback_Raise(ByVal eventArgument As String) As String
Return "Button 1 callback processed."
End Function
Private Shared Function GetResource(ByVal resourceName As String) As String
..........
End Function
Private Function GetCallbackReference(ByVal control As Control) As String
Return Page.ClientScript.GetCallbackEventReference(control, "arg", "callback", "context")
End Function
编译器标记 button1Callback.Raise += AddressOf button1Callback_Raise
带有此错误消息:
'+' 运算符没有为类型“SmartSoft.Web.UI.WebControls.SmartSoft.Web.UI.WebControls.ClientCallback.OnRaiseCallbackEvent”和“Void”定义。
如何在不丢失功能的情况下正确地将代码从 C# 转换为 VB.NET?
【问题讨论】:
-
您是否尝试过一些在线代码转换器,例如http://converter.telerik.com/,以查看生成的输出是否与您的 VB.Net 代码不同
-
是的当然是我做的第一步。
-
将代理声明为
Sub,而不是Function。因为,如果事件被触发,函数结果应该分配到哪里? -
如果我使用 SUB 而不是 FUNCTION 编译器告诉 thar RAISE 是一个事件,我无法声明,我必须在以下指令中使用 RaiseEvent。 Public Sub RaiseCallbackEvent(ByVal eventArgument As String) If Raise IsNot Nothing Then callbackResult = Raise(eventArgument) End Sub。我的目标是有多个客户端回调。在这种情况下,我尝试使用两个简单的按钮。
-
看看this question,其中 OP 询问 VB.NET 是否有返回值的事件,this answer 声明“这在 VB.NET 中是不可能的”