在DotNet中有用户自定义控件(.ascx)和服务器控件(程序代码)

WebControl 类提供所有 Web 服务器控件的公共属性、方法和事件。通过设置在此类中定义的属性,可以控制 Web 服务器控件的外观和行为。

例如在Community中DatePicker控件的实现

publicclass
         DropDownList dropMonth; 
  
         DropDownList dropDay; 
  
         DropDownList dropYear; 
  
 
  
      
  
         public int
              get
                   if (ViewState["Month"] == null) 
  
                       return
                   else 
   
                       return (int)ViewState["Month"]; 
  
              } 
  
              set { ViewState["Month"] = value; } 
  
         } 
  
 
  
      
  
         public int
              get
                   if (ViewState["Day"] == null) 
  
                       return
                   else
                       return (int)ViewState["Day"]; 
  
              } 
  
              set { ViewState["Day"] = value; } 
  
         } 
  
        
         public int
              get
                   if (ViewState["Year"] == null) 
  
                       return
                   else 
   
                       return (int)ViewState["Year"]; 
  
              } 
  
              set
                   ViewState["Year"] = value; 
  
              } 
  
         } 
  
 
  
      
  
         public
              get
                   //确定服务器控件是否包含子控件。如果不包含,则创建子控件。 
  
                   EnsureChildControls(); 
  
                
                   int
                   int
                   int
                
                   if
                       throw new
                
                   return new
                       ( 
  
                       _year, 
  
                       _month, 
  
                       _day 
  
                       ); 
  
              } 
  
              set
                   Month = value.Month; 
  
                   Day = value.Day; 
  
                   Year = value.Year; 
  
              } 
  
         } 
  
 
  
      
  
         /// <summary> 
  
         /// 通知使用基于合成的实现的服务器控件创建它们包含的任何子控件,以便为回发或呈现做准备。 
   
         /// 当开发复合服务器控件或模板服务器控件时,必须重写此方法。 
   
         /// </summary>
         protected override void
              dropMonth = new
              Controls.Add(dropMonth); 
  
        
              dropDay = new
              Controls.Add(dropDay); 
  
            
              dropYear = new
              Controls.Add(dropYear); 
  
 
              if
                   // Get a DateTimeFormatInfo object 
   
                   DateTimeFormatInfo objDateInfo = DateTimeFormatInfo.CurrentInfo; 
  
            
                   // Display Months 
   
                   for (int
                       dropMonth.Items.Add(new
 
  
      
  
                   // Display Days 
   
                   for (int
                       dropDay.Items.Add(i.ToString()); 
  
 
  
      
  
                   // Display Years 
   
                   for (int
                       dropYear.Items.Add(i.ToString()); 
  
            
 
  
      
  
                   dropMonth.Items.FindByValue(Month.ToString()).Selected = true; 
  
                   dropDay.Items.FindByValue(Day.ToString()).Selected = true; 
  
                   dropYear.Items.FindByValue(Year.ToString()).Selected = true; 
  
              }    
        
         } 
  
 
  
      
  
         /// <summary> 
   
         /// 将服务器控件内容发送到提供的 HtmlTextWriter 对象,此对象编写将在客户端呈现的内容。 
   
         /// 在开发自定义服务器控件时,可以重写此方法以生成 ASP.NET 页的内容。 
   
         /// </summary> 
   
         /// <param name="tw">HtmlTextWriter 对象</param> 
  
         protected override void
              // Get Date Parts 
   
              string[] dateParts; 
  
              try
                   DateTimeFormatInfo objDateInfo = DateTimeFormatInfo.CurrentInfo; 
  
                   //modify by yukh ,because in some objDateInfo.ShortDatePattern seperate by "-" eg: yyyy-M-d 
   
                   if
                       dateParts = objDateInfo.ShortDatePattern.Split('/'); 
  
                   else 
   
                       dateParts = objDateInfo.ShortDatePattern.Split('-'); 
  
 
  
      
  
              } 
  
              catch
                   dateParts = new string[]{"m","d","y"}; 
  
              } 
  
              tw.RenderBeginTag(HtmlTextWriterTag.Table); 
  
              tw.RenderBeginTag(HtmlTextWriterTag.Tr); 
  
              tw.RenderBeginTag(HtmlTextWriterTag.Td); 
  
              RenderDatePart(dateParts[0],tw); 
  
              tw.RenderEndTag(); 
  
 
  
      
  
              tw.RenderBeginTag(HtmlTextWriterTag.Td); 
  
              RenderDatePart(dateParts[1],tw); 
  
              tw.RenderEndTag(); 
  
 
  
      
  
              tw.RenderBeginTag(HtmlTextWriterTag.Td); 
  
              RenderDatePart(dateParts[2],tw); 
  
              tw.RenderEndTag(); 
  
 
  
      
  
              tw.RenderEndTag(); // close row 
   
              tw.RenderEndTag(); // close table 
   
 
        
         } 
  
 
  
      
  
         private void RenderDatePart(string
              datePart = datePart.ToLower(); 
  
            
              if
                   dropMonth.RenderControl(tw);    //将服务器控件子级的内容输出到提供的 HtmlTextWriter 对象, 
   
                                                    //此对象编写将在客户端呈现的内容。 
  
              else
                   if
                   dropDay.RenderControl(tw); 
  
              else 
   
                   dropYear.RenderControl(tw); 
  
         } 
  
}