ASP.Net:如果发生错误,是否可以跳过元素的数据绑定?

时间:2009-06-01 15:31:15

标签: asp.net validation data-binding exception-handling

我为网站的不同元素使用了很多中继器,我总是想知道如果发生异常而不是让整个页面崩溃,是否有办法让转发器跳过一个元素?

特别是,我继承了另一个使用类似设计的开发人员的系统,但是他没有为他的业务对象包含任何类型的验证,并且缺少一个属性,整个事情都在烟。

有什么建议吗?

提前致谢!

3 个答案:

答案 0 :(得分:1)

我能提供的最简单的建议是在数据传递给转发器之前检查数据的有效性。我不相信有任何办法让股票转发器在出错时跳过数据元素。

另一种方法是构建自己的转发器,继承自基本的Repeater,以添加该功能,但我没有提供示例代码。也许其他人可以帮助那里。

答案 1 :(得分:0)

我看到它的方式,你至少有三种选择。

  1. 您可以创建一个继承System.Web.UI.WebControls.Repeater的自定义转发器控件,并覆盖数据绑定行为,使其更具有try-catchy(可能在数据绑定错误上无声地失败)。然后,您可以使用这个新的实例轻松替换标准中继器的所有实例。
  2. 您可以在数据绑定之前过滤数据源,以便事先删除您知道会导致问题的项目。这个选项可能非常费力,而且是一个迭代过程。
  3. 您可以尝试向业务对象添加默认值,以便您绑定的属性返回默认实例而不是null(也不好)。
  4. 无论如何,这是我的想法。

    一个问题 - 你说“当财产丢失时”。你的意思是他使用的是一种数据绑定语法,它不提供编译时检查,并且引用了不存在的属性,或者引用了属于null的属性?

    修改

    好的,所以你引用了null的属性。如果您可以访问业务对象的代码,则可以修改它们,以便它们返回一个新的非null实例(这是我给出的第三个选项)。

    你没有说你是否使用.net 3.5,但我会假设你是。您可以在每个业务对象上添加一个新属性“IsValidForDataBinding”。在getter逻辑中,您可以检查每个必要的属性和子对象,以检查有效性,非null等,并返回一个bool。当你来绑定你的转发器时,写一个简单的linq语句来过滤掉无效的项目(即IsValidForDataBinding = false)。话虽如此,我仍然认为编写派生的转发器控件可能是最简单的选择。

答案 2 :(得分:0)

您是否尝试过在引用属性之前使用string.isnullorempty(“string”)来检查值?

以下是参考资料:MSDN