ASP.NET FormView DetailsView和多态

时间:2012-02-12 14:35:17

标签: asp.net .net detailsview formview

我正在编写一个ASP.NET母版页,它执行主要/详细编辑的常见工作(ValidationSummary,错误处理,使用jQuery-ui对话框弹出详细信息视图)。它有两个ContentPlaceHolder控件用于主视图和详细信息视图,主占位符应包含GridView,详细占位符可以是DetailsViewFormView。< / p>

母版页只需要访问DetailsView或FormView的几个基本成员:

  • ChangeMode方法
  • DataBind方法
  • CurrentMode属性
  • InsertItem方法
  • UpdateItem方法

我很惊讶地看到,虽然DetailsView和FormView都有这些相同的成员,但它们不是(从DataBind除外)从公共基类或接口继承的。甚至还有两个等效的枚举FormViewModeDetailsViewMode,因此ChangeMode和CurrentMode成员甚至没有相同的签名。

我打算通过创建一个包装类来解决这个问题,但有人可以解释为什么它们是这样实现的吗?我试图以多态方式使用它们来存储麻烦吗?

我发现很难相信这不是微软工程师的故意,所以我只能得出结论,他们打算阻止多态使用。

1 个答案:

答案 0 :(得分:0)

  

虽然DetailsView和FormView都有这些相同的成员,但它们都是   不是从公共基类或接口继承的。

是的,他们是:

DetailsView:CompositeDataBoundControl,IDataItemContainer,INamingContainer,ICallbackContainer,ICallbackEventHandler,IPostBackEventHandler,IPostBackContainer,IDataBoundItemControl,IDataBoundControl,IFieldControl

FormView:CompositeDataBoundControl,IDataItemContainer,INamingContainer,IPostBackEventHandler,IPostBackContainer,IDataBoundItemControl,IDataBoundControl,IRenderOuterTableControl