ASP.NET UserControl公共变量已声明 标记报未定义错误该如何解决
问题原因及解决方法
常见触发原因
- 公共字段无法被模板引擎识别:ASP.NET Web Forms的ASCX模板引擎默认仅支持访问公共属性,你代码里把
ScaleEntries声明为公共字段(Field),没有封装为属性,会导致模板无法识别。 ScaleEntry类的访问级别不足:如果ScaleEntry类没有声明为Public,就算ScaleEntries本身是公共的,也会因为元素类型不可访问触发编译错误。- 项目类型与CodeBehind属性不匹配:如果你用的是Web Site项目而非Web Application项目,需要把ASCX头部的
CodeBehind属性改为CodeFile,否则模板无法正确关联后置代码的成员。 - 命名空间不匹配:检查后置代码的类所在的命名空间是否和ASCX头部
Inherits属性的值Client.Project.SlidingScaleTableReadonly完全一致,VB虽然不区分大小写,但编译时会校验完全匹配。
具体修复步骤
- 首先把后置代码里的公共字段改为自动属性,同时初始化避免空引用:
Public Class SlidingScaleTableReadonly Inherits UserControl ' 改为公共属性,初始化空列表避免空引用异常 Public Property ScaleEntries As New List(Of ScaleEntry) Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load End Sub End Class
- 确认
ScaleEntry类的声明为公共级别:
Public Class ScaleEntry ' 你的属性声明示例 Public Property LowerValue As Decimal Public Property HigherValue As Decimal Public Property UnitToDeliver As Integer End Class
- 如果是Web Site项目,修改ASCX头部的属性:
把CodeBehind="SlidingScaleTableReadonly.ascx.vb"改为CodeFile="SlidingScaleTableReadonly.ascx.vb" - 清理解决方案后重新编译即可解决报错。
内容的提问来源于stack exchange,提问作者B. Bergeron
相关产品推荐
相关产品推荐

