博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Asp.Net 实际应用开发、组件开发

Posted on 2005-06-02 10:28  alpha  阅读(2671)  评论(5)    收藏  举报

各位好,第一篇BLOG既带随笔性质又带提问,不知是否适宜。
但我来BLOG的宗旨就是为了记录.NET学习与应用的心路历程,并相应的促进自己的提升,相信大家亦能理解。
[如不应发在首页还请告知,本人对BLOG亦存在一个学习的过程]

本文已在CSDN.net发帖,见:
http://community.csdn.net/Expert/topic/4052/4052791.xml?temp=.5562555

转述如下:
---------------------------------------------------------------------
    这几天一直在学习asp.net组件开发,主要是从《asp.net服务器控件与组件开发》、《深入剖析asp.net组件设计》两本书入手,但由于时间有限,圄囵吞枣。特别是对黄忠成的《深入剖析asp.net组件设计》,其技术的深度、描述语言的风格、讲解程度、C#程序(我对VB.NET稍熟些),让我感受到了打击...

    前面我就遭遇此书中一问题,现未得解决之道,见:
http://community.csdn.net/Expert/topic/4042/4042913.xml?temp=.8564264

    也没办法,时间不允许我细细研究,立马介予实际,着手开发一个WEB应用程序。

    在欲开发的软件中有很多页面或页面的部分具备其共同性,为了提高页面的复用程度,我可以说是绞尽脑汁。
    首先还以为能像windows开发一样能页面继承,结果多方考究查找资料后终告泡汤(想一想,如能方便的页面继承多好呀~~`~,不晓得微软那些大头们为何不往这方面多动脑细胞~`` 听说2.0中已初俱页面继承功能,但看了些文章对其同样不敢过多奢望);
    然后想到user control,但其设计的不可见性、不利于动态布局(我的软件中界面虽具备相当的相似性、酷似模板,但亦多为动态布局)、,使我又不得不放弃。
    于是否我想到了自定义组件,狂翻了一遍上述两书后,我头大了......
 
    我原是用PB做windows应用开发的,很多脑筋都还停留在windows应用开发阶段未完全转型,包括分析、设计等....
    
   

    [思想篇]

    为了提高界面的一致性、可复用程度、可扩充性并使WEB软件赶向windows的交互能力,我的做法是:
    1、创建、扩充自身组件库,主要包括几个部分:
 (一)、两书中、网上能用得着的的组件(其中亦包括吴老大的aspnetpager);
 (二)、Infragistics NetAdvantage 2005、ComponentArt、ComponentOne Studio ASP.NET(当然得有所取舍,熟悉其中之一都耗时不少);
 (三)、适合此软件的特定组件,又包括:
  1)对两项组件的继承:我是把上两项中要用到的组件大多数继承下来,至所以这样做:
  一是想统一其模板风格设置一些默认属性,避免用时做重复功,如:继承了Infragistics中的WebButtons控件,使其具备适合此软件的颜色大小样式等风格,并干脆再次继承建立了一组常用的既定功能按钮,包括查询、新增、删除等,用到时直接拖入即可;
  二是想建立这样一个中间层组件,如果到时需求发生变化,就不需改根源(别人的组件代码)也无需去一个个的改应用组件之处了。
  2)另外一种考虑是强强联合,建立组合组件。如Infragistics NetAdvantage中的UltraWebGrid+AspNetPager,初步页面中创建在一起测试,效果还不错哟
  3)自身需扩建控件。说实话,自己对创建自定义控件不敢恭维,到时耗时耗力可能会得不偿失只能先依是否必需而尽可能不为了。如“图片文字链接按钮”,左边一个小图片右边为链接文字的一个链接按钮。

     [实现篇]

     尽管就这样一些不成熟的想法(请多指出不成熟之处,我好立马纠正),实现起来我都觉有力不从心,唉~~`谁叫我接触“倒来得”不久呢~~~
     OK,我就再实例化一下我的想法,亦描述一下已经遭遇到的问题。
     我的软件中有一种很通用的页面模板组成如下:
     ___________________________________________
     |   TAB页区                               |
     ___________________________________________
     |   查询条件录入区                        |
     |   内容标题及“图片文字链接按钮”区      |
     |   查询结果显示区(即WebGrid)           |

     此页中,我打算创建组件:WebTab、通用功能按钮(如查询)、图片文字链接按钮、通用功能图片文字链接按钮(如新增、删除、退出等)、固定风格WebGrid等。
     然后创建除TAB页以外部分的UserControl即ASCX文件,ASCX中的组成部分多为上述组件。
     单击不同的TAB即加载不同的ASCX。

     实现过程中,我熟悉了一下[思想篇]中(一)(二)项的既定组件,尝试着实现(三),但我碰到了一些小问题:
     1、由于此TAB实际上只相当于一个个的链接按钮,如果使用Infragistics  NetAdvantage中的UltraWebTab似乎有点大财小用?也势必增加页面大小,但如果每个页面都用表格+背景图+文字实现TAB效果,并加上代码控制TAB切换的话,那样每次都复制代码是否用太麻烦并已不具备复用性了。还是自己开发一个简易TAB组件?该如何决择?
      2、可能是使用了子控件、模版化控件技术的缘故。我在Infragistics NetAdvantage中一些组件极为复杂的组件时,如UltraWebGrid。我首先在自己的组件项目中引用了这些控件所在位置的相应DLL文件并把这些DLL的“复制到本地”属性设为True,然后继承它们并创建新的组件ABWebContrl。在页面使用新继承创建的组件时,HTML如下:

<ap:ABWebGrid id="OAWebGrid1" style="Z-INDEX: 102; LEFT: 104px; POSITION: absolute; TOP: 144px" runat="server" Width="384px">
 
<DisplayLayout RowHeightDefault="20px" Version="4.00" borderCollapseDefault="Separate" Name="OAWebGrid1">
  
<AddNewBox>
   
<Style BorderWidth="1px" BorderStyle="Solid" BackColor="LightGray">
   <BorderDetails ColorTop="White" WidthLeft="1px" WidthTop="1px" ColorLeft="White"></BorderDetails>
   
</Style>
  
</AddNewBox>
  
<Pager>
   
<Style BorderWidth="1px" BorderStyle="Solid" BackColor="LightGray">
   <BorderDetails ColorTop="White" WidthLeft="1px" WidthTop="1px" ColorLeft="White"></BorderDetails>
   
</Style>
  
</Pager>
  
<HeaderStyleDefault BorderStyle="Solid" BackColor="LightGray">
   
<BorderDetails ColorTop="White" WidthLeft="1px" WidthTop="1px" ColorLeft="White"></BorderDetails>
  
</HeaderStyleDefault>
  
<FrameStyle Width="384px" BorderWidth="1px" Font-Size="8pt" Font-Names="Verdana" BorderStyle="Solid" Height="200px"></FrameStyle>
  
<FooterStyleDefault BorderWidth="1px" BorderStyle="Solid" BackColor="LightGray">
   
<BorderDetails ColorTop="White" WidthLeft="1px" WidthTop="1px" ColorLeft="White"></BorderDetails>
  
</FooterStyleDefault>
  
<EditCellStyleDefault BorderWidth="0px" BorderStyle="None"></EditCellStyleDefault>
  
<RowStyleDefault BorderWidth="1px" BorderColor="Gray" BorderStyle="Solid">
   
<Padding Left="3px"></Padding>
   
<BorderDetails WidthLeft="0px" WidthTop="0px"></BorderDetails>
  
</RowStyleDefault>
 
</DisplayLayout>
 
<Bands>
  
<Infragistics.WebUI.UltraWebGrid.UltraGridBand></Infragistics.WebUI.UltraWebGrid.UltraGridBand>
 
</Bands>
</ap:ABWebGrid>

    此组件在设计界面中显示正常,就是QuickDesign属性设置presets没有了模版。但运行浏览时出现“分析器错误”,错误内容如下:
-------------------------------------------------------------
说明: 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。

分析器错误信息: Infragistics.WebUI.UltraWebGrid.BandsCollection 必须具有类型为
“Infragistics.WebUI.UltraWebGrid.UltraGridBand”的项。
“Infragistics.WebUI.UltraWebGrid.UltraGridBand”的类型为
“System.Web.UI.HtmlControls.HtmlGenericControl”。
源错误:

行 49:      </DisplayLayout>
行 50:      <Bands>
行 51:       

<Infragistics.WebUI.UltraWebGrid.UltraGridBand></Infragistics.WebUI.UltraWebGrid.UltraGridBand>
行 52:      </Bands>
行 53:     </ap:ABWebGrid></FONT>
------------------------------------------------------------- 

     请问各位大哥,这是为何?该如何解决呢?

     想到哪就写到哪,亦未细整理。
     已凌晨三点,儿童节早已过,外面居然响起了洒水车的歌声,就先写这些。

     似乎罗嗦长了点...具体的两个问题也就是[实现篇]中的两个问题
     其中第2个问题说白了就是:
     我继承了已有自定义控件Infragistics NetAdvantage的UltraWebGrid创建新的自定义控件ABWebGrid,运行时确出现了“分析器错误”,不知何故?也不知该如何解决。各位亦可自己继承一个已有的具备子控件和模板控件的自定义服务器控件试试看,是否也会出现此一问题?

     实在是对Asp.net了解不深,对asp.net技术把握不住,发帖、发BLOG,是想请各位大哥左看右看上看下看仔仔细细的把我评头论足一翻,看我的做法、想法、各个点各个疑虑各个问题、可能出现的问题、学习的方向、前进的道路等等等等,正面的也罢反面的也罢,只相当于给大家带来一个小小的“课题”,还请多多多多指点迷津, 亦不甚感激。