今天无意中发现的一个兼容性问题。如果你使用了Monorail+Linq进行开发,这个问题很值得注意。 我在项目中使用Linq内置的OnXXXChanged/OnXXXChanging进行数据有效性验证,比如
partial void OnTopicChanging( string value) { if (!value.IsLengthIn(1, 100)) throw new DataException("主题不符合要求,请返回重新填写"); } 然后在前台用 SmartDispatcherController进行数据绑定,比如 public void Post([DataBind( " article " )]ArticleInfo articleInfo) {} 然后我在Globle.ascx.cs中进行未处理异常的捕获 但奇怪的是,当OnTopicChanging中的异常发出后,Globle.ascx.cs竟然无法捕获。也就是说,如果你直接像我这样绑定数据并处理异常的话,是无法得到想要的结果的。 其实原因很简单, SmartDispatcherController在数据绑定的时候用了一个try catch,然后把绑定过程中发生的所有错误全部截获,并放到了 BoundInstanceErrors中去了。 解决方法有两个:1.判断 BoundInstanceErrors的Count并做相应处理;2.把 OnTopicChanging中的验证移到 OnValidate中去....怨念啊~~~我不知道ASP.NET MVC是否存在类似的问题,有条件的朋友可以测试一下。转载于:https://www.cnblogs.com/yzlhccdec/archive/2008/03/21/1116725.html
相关资源:数据结构—成绩单生成器