关于自己定义Page的一个小问题

关于自己定义Page的一个小问题

[Key word:Page]
[测试环境:OS,WinXp+sp2;开发环境,Microsoft VS.NET2003;.Framework,1.1]

前些时候遇到这样的一个问题:
我自己定义了一个通用Page,继承自System.Web.UI.Page
public class BasePage:Page{
}
完了之后,又这样做了一个简单的继承:
public class AdminPage:BasePage{
}
然后在我的设计页面里的Web Form继承自AdminPage的,会出现错误,提示父类不能实现而不能使用设计模式。

这是可能理解的,因为在设计的时候,你的web form要实现这样的一个类,当然这个类得是存在的。但没想到遇到以下几个问题的时候,也会出现同样的问题:
1、自己定义的Page类里有任何的纯虚函数的时候,也没有办法实现(在设计时),且不说多次继承。
2、在与构造函数相关的所有方法中,有访问不到的数据时,也会出现错误。

这里我讨论一下第二种情况以及解决方法,先看我的一个继承自Page类的代码(部份):

None.gif      public   class  BasePage : Page,IUIPage
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
ContractedSubBlock.gifExpandedSubBlockStart.gif        
fileds#region fileds
InBlock.gif        
protected IVisitor m_user;
InBlock.gif        
protected PagesTypes m_pageType;
InBlock.gif        
protected string m_userIP;
InBlock.gif        
protected System.DateTime m_requestTime    = System.DateTime.Now;
InBlock.gif        
private bool m_showDebugMsg;
InBlock.gif        
private bool m_showCopyRight;
InBlock.gif        
private readonly string m_copyright;
ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
InBlock.gif        
public BasePage()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
this.m_showDebugMsg    = WaveSystem.SystemVarible["ShowDebugMessage"].ToString().ToLower()=="yes";
InBlock.gif            
this.m_showCopyRight    = WaveSystem.SystemVarible["ShowCopyRight"].ToString().ToLower()=="yes";
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

这里的WaveSystem.SystemVarible["ShowDebugMessage"]在运行时会从数据库里取得相关数据。而这样给我带来的后果是:所有继承自BasePage的web form都不能使用设计页面了(都是HTML模式)。这让我很郁闷,因为这些信息也只有在运行时才有意义,设计环境不知道,所以它必须在设计的时候也取得WaveSystem.SystemVarible["ShowDebugMessage"]的值,而这显然是不能实现的。

就这个问题,上次也简单的讨论过一次,后来没找到解决方法,只好用常量先代替:
    this.m_showDebugMsg  = true;
    this.m_showCopyRight = false;

然而今天偶然遇到一个方法,因为我不能绝对保证在运行时也可以得到WaveSystem.SystemVarible["ShowDebugMessage"]的值,所以修改了一下代码(部份):

None.gif          public  BasePage()
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
this.m_showDebugMsg        = WaveSystem.SystemVarible["ShowDebugMessage"].ToString().ToLower()=="yes";
InBlock.gif                
this.m_showCopyRight    = WaveSystem.SystemVarible["ShowCopyRight"].ToString().ToLower()=="yes";
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
this.m_showDebugMsg        = true;
InBlock.gif                
this.m_showCopyRight    = false;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

歪打正着,没想到这样一改,在设计模式下也通过了(注意,要先编译一下这个页面)。那么简单的结论就是:设计web form的时候,环境是在“运行”我们的部份代码的。而又不是真正的运行,甩以有一些只有在运行时才能得到的数据,在设计时如果“访问”到了,那么就会出现这样的错误。
我不知道VS.net2005里是否也会有这样的问题,但不管怎样,这次偶然的结果为我提供了一个方法解决这一问题。而关于虚函数及多次继承问题,还有待解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值