在ASP.NET2.0的登陆组件里,LOGINVIEW是个很好用却又非常令人郁闷的控件。
说它好用,是因为它能够自动区分当前WEB访问者的用户状态,他可以区分匿名和登录状态,登录状态又可以区分具体的角色权限,在这些细分的状态里,可以让设计者自由的添加每种状态页面展示内容,至于状态的区分则不需要劳累程序员来判断,控件自己已经内置了状态判断,它会自动的展示对应状态的页面内容。
虽然这个控件如此贴心,但也有令人郁闷的地方,那就是在页面设计时,你在后台代码里不能直接调用LOGINVIEW控件内部的子控件。比如你在LOGINVIEW的匿名模版里设置了一个LOGINSTATUS控件,用于显示登录状态,这是你想在后台控制一下该控件文本标题内容,你直接引用了LOGINSTATUS1,结果VS2005告诉你“当前上下文中不存在”LOGINSTATUS1,你一定会觉得这真是个天大的玩笑,控件已经真真切切的摆在那里了,怎么会不存在呢?但事实就是LOGINVIEW状态模板内部的控件的确不能直接引用。
不过天无绝人之路,既然控件真实存在,不能直接引用,那就来点间接的。通用的方法是findcontrol来寻找,此方法适用于后台代码中的直接引用,再一个方法是在控件的回发事件里通过参数SENDER获取,这个SENDER就是触发事件的控件对象,可以直接强制类型转换来获得对目标控件的引用。