如何获取FormView内Button控件ID?解决空引用异常问题
我一眼就看出问题出在哪了——你查找控件的时机完全错了!
你现在的代码是先执行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
相关产品推荐
相关产品推荐

