文档上说UIPAB的Controller是对应MVC的Controller,State对应Model,View对应View
但是,我觉得这和传统的MVC的定义有出入,Model应该是处理业务逻辑才对,而不是储存状态,Controller是响应用户输入,而不是处理业务逻辑.
System.Web.UI.Page应该是Controller和View的混合体吧?
刚才在做一个使用NHibernate的主从表维护的页面.hibernate的一对多集合一般用Set,一种元素不可重复的集合.由于.Net没有Set,作者先用HashTable或SortedList凑合用着,而集合的类型必须要声明为IDictionary.因为某些原因我必须要对从表数据按Id排序,于是在配置文件加上一个自己写的Comparer.结果程序莫名其妙出错,明明加了两个不同的记录,确会出现"加入了重复的键"的错误.后来经过调试和实验才知道,NHibernate会把可排序的Set实例化成SortedList,而SortedList是通过他的comparer的比较结果判断两个对象是否相同,而不是reference equal.
这是反编译出来的Add方法的代码:
public virtual void Add(object key, object value)

{
if (key == null)

{
throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key"));
}
int i = Array.BinarySearch(keys, 0, _size, key, comparer);
if (i >= 0)

{

throw new ArgumentException(Environment.GetResourceString("Argument_AddingDuplicate__", new object[]
{GetKey(i), key}));
}
Insert(~i, key, value);
}
当时我对数据的操作还是在内存中进行,没插入数据库,所以Id还都是0,它就认为有重复键了.
我只好修改comparer的代码了.如果Id都是0,就让比较结果为-1.
...
...
(n天后)
呀,晕了,原来SortedList在初始化时会用个x.CompareTo(x)检查Comparer是否工作正常,所以还是会出错 >_<
解决问题的方法,只能让Set集合 = new HashTable(),然后在Add元素进去.实在没办法让SortedList存在排序结果相同的元素
有些断点我想取消,但是点击左边或者按F9之后,断点的地方由高亮的褐色变成了褐色的边框,下一次运行到这个地方还是会停下来,即使重启了VS.NET也是如此,为什么!为什么

...
...
(十分钟后)
规律总算找到了,凡是不在启动项目的代码都会这样,启动前设了断点在运行时无法取消,只能停了程序再取消.得一个个找还真麻烦.原因不明.请高人指点
...
...
(半天后)
"清除所有断点"就可以了,在调试菜单或者ctrl+shift+F9