将空值绑定到Web用户控件的属性
时间:2020-03-06 14:23:46 来源:igfitidea点击:
在一个稍微复杂的页面上工作,以配置工作中的客户。设置是有一个主页,其中包含用于各种设置组的各种"面板"。
在一种情况下,主表上有一个电子邮件地址字段,并且有一个"导出"配置来控制电子邮件的发送方式。我创建了一个选择公司的主面板,并绑定到FormView。 FormView包含一个Web用户控件,用于处理导出详细信息的显示/配置。
Web用户控件包含一个属性,该属性定义应处理的Config,并使用Bind()从FormView中获取值。
基本上,控件是这样使用的:
<syn:ExportInfo ID="eiConfigDetails" ExportInfoID='<%# Bind("ExportInfoID" ) %>' runat="server" />
被绑定的属性在CodeBehind中这样声明:
public int ExportInfoID { get { return Convert.ToInt32(hfID.Value); } set { try { hfID.Value = value.ToString(); } catch(Exception) { hfID.Value="-1"; } } }
每当ExportInfoID
为null时,我都会得到null引用异常,但是最重要的是,它实际上是在尝试设置属性之前发生的(否则它将在该版本中被捕获)。
任何人都知道发生了什么,或者更重要的是,如何解决它……?
解决方案
似乎是因为" hfID.Value"尚未初始化为值,因此无法进行转换。我们可能想在getter中添加一个null检查或者进行一些验证,以确保`hfID.Value'不是null而是数字。
Bind无法将null值转换为int值,以设置ExportInfoID属性。这就是为什么它不会陷入代码中的原因。我们可以将属性设置为可为null的类型(int?),也可以在绑定逻辑中处理null。
所以会是这样的
bind receives field to get value from bind uses reflection to get the value bind attempts to set the ExportInfoID property // boom, error
在hfID上使用Null Object设计模式
http://www.cs.oberlin.edu/~jwalker/nullObjPattern/