[英]Binding a null value to a property of a web user control
在一个稍微复杂的页面上工作,以配置工作中的客户。 设置是有一个主页,其中包含用于各种设置组的各种“面板”。
在一种情况下,主表上有一个电子邮件地址字段,并且有一个“导出”配置来控制如何发送电子邮件。 我创建了一个选择公司的主面板,并绑定到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且为数字。
绑定不能将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设计模式
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.