【问题标题】:Binding a null value to a property of a web user control将空值绑定到 Web 用户控件的属性
【发布时间】:2008-09-18 22:08:04
【问题描述】:

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

在一种情况下,主表上有一个电子邮件地址字段和一个“导出”配置,用于控制电子邮件的发送方式。我创建了一个选择公司并绑定到 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 为空时,我都会收到空引用异常,但更重要的是它发生在它实际尝试设置属性之前(或者它会在这个版本中被捕获。)

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

【问题讨论】:

    标签: c# .net asp.net


    【解决方案1】:

    Bind 无法将 null 值转换为 int 值,以设置 ExportInfoID 属性。这就是为什么它不会被您的代码捕获的原因。您可以将属性设为可为空的类型(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
    

    【讨论】:

      【解决方案2】:

      似乎是因为hfID.Value 尚未初始化为值,因此无法转换。您可能想在您的 getter 中添加一个 null 检查或一些验证,以确保 hfID.Value 不为 null 并且是数字。

      【讨论】:

        【解决方案3】:

        在 hfID 上使用 Null Object 设计模式

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-29
          • 1970-01-01
          相关资源
          最近更新 更多