You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET用户控件事件传递失效,求最简可用VB实现示例

问题分析与修正示例

你的代码无法运行主要有两个核心问题:

  • 事件名称不匹配:用户控件定义的事件是EVT,但页面中绑定的是TestEvent,两者名称不一致
  • 事件参数声明不合理:用ByRef传递字符串常量,不符合VB的参数传递规则

以下是简化的可运行VB示例:

1. 用户控件代码(MyTestControl.ascx.vb)

' 定义事件,使用ByVal传递状态值
Public Event StatusChanged(ByVal Status As String)

Public Sub StartProcess()
    ' 模拟业务处理逻辑
    Dim sStatus As String = "Pass" ' 替换为实际处理结果
    Dim sExpected As String = "Pass"

    ' 根据判断结果触发事件
    If sStatus = sExpected Then
        RaiseEvent StatusChanged("Pass")
    Else
        RaiseEvent StatusChanged("Fail")
    End If
End Sub

2. 页面后台代码(Default.aspx.vb)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    ' 绑定用户控件的事件到处理方法
    AddHandler MyTestControl1.StatusChanged, AddressOf OnStatusChanged
End Sub

' 事件处理方法,参数需和用户控件的事件声明一致
Private Sub OnStatusChanged(ByVal Status As String)
    ' 根据状态值执行后续处理
    If Status = "Pass" Then
        Response.Write("处理成功")
    Else
        Response.Write("处理失败")
    End If
End Sub

3. 页面前台(Default.aspx)

确保已注册用户控件:

<%@ Register TagPrefix="uc" TagName="MyTestControl" Src="~/MyTestControl.ascx" %>

<uc:MyTestControl ID="MyTestControl1" runat="server" />

触发事件的示例(比如按钮点击):

Protected Sub btnProcess_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnProcess.Click
    MyTestControl1.StartProcess()
End Sub

内容的提问来源于stack exchange,提问作者Carl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:33:00