Skip to main content
 首页 » 编程设计

c#之将空值绑定(bind)到 Web 用户控件的属性

2024年01月13日32webabcd

在工作中处理一个有点复杂的页面来配置客户。设置是有一个主页,其中包含用于各种设置组的各种“面板”。

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

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

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

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

被绑定(bind)的属性在 CodeBehind 中声明如下:

public int ExportInfoID     
{ 
    get 
    { 
        return Convert.ToInt32(hfID.Value); 
    } 
    set 
    { 
        try 
        { 
            hfID.Value = value.ToString(); 
        } 
        catch(Exception) 
        { 
            hfID.Value="-1"; 
        } 
    } 
} 

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

有人知道发生了什么,或者更重要的是,知道如何解决它......?

请您参考如下方法:

Bind 无法将 null 值转换为 int 值,以设置 ExportInfoID 属性。这就是为什么它没有被您的代码捕获的原因。您可以使该属性成为可空类型(int?),或者您可以在绑定(bind)逻辑中处理空值。

应该是这样的

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