繁体   English   中英

将空值绑定到Web用户控件的属性

[英]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设计模式

http://www.cs.oberlin.edu/~jwalker/nullObjPattern/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM