关于c#:将空值绑定到Web用户控件的属性

关于c#:将空值绑定到Web用户控件的属性

Binding a null value to a property of a web user control

在一个稍微复杂的页面上工作,以配置工作中的客户。设置是有一个主页,其中包含用于各种设置组的各种"面板"。

在一种情况下,主表上有一个电子邮件地址字段,并且有一个"导出"配置来控制如何发送电子邮件。我创建了一个选择公司的主面板,并绑定到FormView。 FormView包含一个Web用户控件,用于处理导出详细信息的显示/配置。

Web用户控件包含一个属性,该属性定义应处理的Config,并使用Bind()从FormView中获取值。

基本上,控件是这样使用的:

1
<syn:ExportInfo ID="eiConfigDetails" ExportInfoID='<%# Bind("ExportInfoID" ) %>' runat="server" />

被绑定的属性在CodeBehind中这样声明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public int ExportInfoID    
{
    get
    {
        return Convert.ToInt32(hfID.Value);
    }
    set
    {
        try
        {
            hfID.Value = value.ToString();
        }
        catch(Exception)
        {
            hfID.Value="-1";
        }
    }
}

每当ExportInfoID为null时,我都会得到一个null引用异常,但是最重要的是,它实际上是在尝试设置属性之前发生的(否则它将在此版本中被捕获。)

任何人都知道发生了什么,或更重要的是,如何解决它……?


在hfID上使用Null Object设计模式

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


绑定不能将null值转换为int值,以设置ExportInfoID属性。 这就是为什么它不会陷入您的代码中的原因。 您可以将属性设置为可为null的类型(int?),也可以在绑定逻辑中处理null。

所以会是这样的

1
2
3
bind receives field to get value from
bind uses reflection to get the value
bind attempts to set the ExportInfoID property // boom, error


似乎是因为hfID.Value尚未初始化为值,所以无法转换。 您可能想在您的吸气剂中添加一个空检查或进行某些验证,以确保hfID.Value不为空且为数字。


推荐阅读

    linux命令超时设置?

    linux命令超时设置?,时间,系统,软件,电脑,服务,资料,中心,网络,管理,状态,lin

    linux设置命令行长度?

    linux设置命令行长度?,系统,工作,信息,地址,命令,工具,异常,管理,目录,文件,l

    linux设置代替命令?

    linux设置代替命令?,系统,地址,网络,工作,软件,工具,服务,信息,命令,别名,lin

    linux命令设置时区?

    linux命令设置时区?,时间,系统,国家,大陆,命令,时区,时钟,日期,指令,时分,lin

    linux显卡设置命令?

    linux显卡设置命令?,管理,官方网站,官网,系统,信息,电脑,地址,地方,平台,数

    绑定cpu命令linux?

    绑定cpu命令linux?,系统,情况,工具,名字,代码,线程,进程,命令,发热量,以下,Li

    linux设置命令限制?

    linux设置命令限制?,数字,情况,信息,管理,系统,最新,在线,设备,第一,发行,Lin

    linux设置日志命令行?

    linux设置日志命令行?,异常,系统,实时,日志,管理,信息,对比,项目,名称,情况,L

    linux命令设置日期?

    linux命令设置日期?,时间,系统,命令,服务,大陆,信息,国家,时钟,终端,日期,详

    linux命令行设置网卡?

    linux命令行设置网卡?,系统,地址,信息,网络,工具,电脑,工作,名称,设备,网卡,l

    linux命令优先级设置?

    linux命令优先级设置?,系统,时间,实时,策略,优先级,分时,管理,周期性,进程,

    linux设置ip命令?

    linux设置ip命令?,地址,系统,密码,设备,命令,服务,工具,网络,网卡,计算机,在L

    linux设置命令是什么?

    linux设置命令是什么?,系统,工作,信息,名称,地址,命令,在线,基础,标准,工具,l

    linux命令设置密码?

    linux命令设置密码?,密码,系统,服务,软件,地址,电脑,流程,管理,用户,命令,问

    linux设置编码命令?

    linux设置编码命令?,系统,数据,发展,文件,字符集,命令,数据库,以下,终端,大

    linux命令行设置语言?

    linux命令行设置语言?,系统,管理,环境,国家,工具,电脑,软件,文化,底部,语言,l

    linux设置壁纸的命令?

    linux设置壁纸的命令?,图片,系统,电脑,照片,位置,终端,颜色,字体,单击,壁纸,

    linux恢复命令行设置?

    linux恢复命令行设置?,系统,工作,密码,信息,工具,地址,电脑,命令,情况,地方,

    linux命令提示设置?

    linux命令提示设置?,系统,工作,地址,信息,命令,软件,目录,管理,变量,文件,Lin

    linux设置命令ip?

    linux设置命令ip?,地址,系统,代码,命令,密码,网卡,终端,计算机,测试,网关,lin