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

如何获取FormView内Button控件ID?解决空引用异常问题

解决FormView中获取内部Button控件时的“未将对象引用设置到对象的实例”错误

我一眼就看出问题出在哪了——你查找控件的时机完全错了!

你现在的代码是先执行FindControl去拿btnRevisi,然后才调用fvData.ChangeMode(FormViewMode.Edit)切换到编辑模式。但FormView的机制是:只有切换到对应模式后,该模式下的模板(比如这里的EditItemTemplate)才会被渲染,里面的控件才会被实例化。所以你在切换模式前找控件,btnRevisi根本还没被创建,自然返回Nothing,后续访问oButton.Visible就会触发那个空引用错误。

修复方案

把查找控件的代码移到切换模式之后,同时加上空值判断(这是个好习惯,能避免意外情况)。修改后的VB代码如下:

lblError.Visible = False
If e.CommandName = "Select" Then
    fvData.ChangeMode(FormViewMode.Edit)
    fvData.Caption = "Edit Data"
    ' 切换到编辑模式后,再查找模板内的按钮控件
    Dim oButton As Button = DirectCast(fvData.FindControl("btnRevisi"), Button)
    ' 先判断控件是否存在,再操作
    If oButton IsNot Nothing Then
        oButton.Visible = False
    End If
End If

额外排查要点

  • 确认btnRevisi的ID拼写完全一致:虽然VB不区分大小写,但最好和HTML里的ID完全匹配,避免不必要的麻烦
  • 确保btnRevisi确实在EditItemTemplate内部:你的HTML代码里是对的,但如果后续模板有改动,要检查这一点
  • 如果FormView放在UpdatePanel里:确保异步回发时FormView能正确重新渲染模板控件,必要时可以在切换模式后调用fvData.DataBind()强制绑定数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:51:11