我正在编写一个ASP.NET母版页,它执行主要/详细编辑的常见工作(ValidationSummary,错误处理,使用jQuery-ui对话框弹出详细信息视图)。它有两个ContentPlaceHolder
控件用于主视图和详细信息视图,主占位符应包含GridView
,详细占位符可以是DetailsView
或FormView
。< / p>
母版页只需要访问DetailsView或FormView的几个基本成员:
我很惊讶地看到,虽然DetailsView和FormView都有这些相同的成员,但它们不是(从DataBind除外)从公共基类或接口继承的。甚至还有两个等效的枚举FormViewMode
和DetailsViewMode
,因此ChangeMode和CurrentMode成员甚至没有相同的签名。
我打算通过创建一个包装类来解决这个问题,但有人可以解释为什么它们是这样实现的吗?我试图以多态方式使用它们来存储麻烦吗?
我发现很难相信这不是微软工程师的故意,所以我只能得出结论,他们打算阻止多态使用。
答案 0 :(得分:0)
虽然DetailsView和FormView都有这些相同的成员,但它们都是 不是从公共基类或接口继承的。
是的,他们是:
DetailsView:CompositeDataBoundControl,IDataItemContainer,INamingContainer,ICallbackContainer,ICallbackEventHandler,IPostBackEventHandler,IPostBackContainer,IDataBoundItemControl,IDataBoundControl,IFieldControl
FormView:CompositeDataBoundControl,IDataItemContainer,INamingContainer,IPostBackEventHandler,IPostBackContainer,IDataBoundItemControl,IDataBoundControl,IRenderOuterTableControl