关于动态加载用户控件的问题

今天闲着没事,做了一个动态加载用户控件的实验,结果发现了一个问题。

用户控件:TimeDisplay.ascx,里面只有一个LinkButton代码如下

 

1  <% @ Control Language = " C# "  AutoEventWireup = " true "  CodeFile = " TimeDisplay.ascx.cs "  Inherits = " TimeDisplay "   %>
2  < asp:LinkButton  ID ="LinkButton1"  runat ="server" />
3 

 

TimeDisplay.ascx.cs代码

 

 1  public   partial   class  TimeDisplay : System.Web.UI.UserControl
 2  {
 3       protected   void  Page_Load( object  sender, EventArgs e)
 4      {
 5           if  ( ! IsPostBack)
 6          {
 7              RefreshTime();
 8 
 9              
10          }
11          LinkButton1.Click  +=  (d, g)  =>  { RefreshTime(); };
12      }
13       ///   <summary>
14       ///  ssdfsdfsdfsdfsdfsdf
15       ///   </summary>
16       public   void  RefreshTime()
17      {
18           if  (format  ==   null )
19          {
20              LinkButton1.Text  =  DateTime.Now.ToLongTimeString();
21          }
22           else
23          {
24              LinkButton1.Text  =  DateTime.Now.ToString(format);
25          }
26      }
27     
28       public   string  format {  get set ; }
29      
30  }

 

 

 

此代码定义了一个RefreshTime()方法将LinkButton的Text属性显示为当前时间,并且定义了一个format属性,这个属性是用来格式化时间的格式的。

在宿主页面Default.aspx.cs中的Page_Load事件中动态加载TimeDisplay用户控件。

代码如下

 

1    protected   void  Page_Load( object  sender, EventArgs e)
2      {
3          UserControl mycontrol  =  (UserControl)Page.LoadControl( " TimeDisplay.ascx " );
4          PlaceHolder1.Controls.Add(mycontrol);
5      }

 

运行结果正常,页面显示如下。

 
但是如果我想在动态加载用户控件的时候要指定这个用户控件的 format属性时,问题来了,mycontrol并不包含format属性,原因是mycontrol的类型是UserControl,而TimeDisplay控件的类型就是它本身TimeDisplay类型,所以mycontrol中并没有format属性。
于是我尝试下面这种方法,代码如下:
代码
1  protected   void  Page_Load( object  sender, EventArgs e)
2      {
3          TimeDisplay timedisplay  =  (TimeDisplay)Page.LoadControl( " TimeDisplay.ascx " );
4          timedisplay.format  =   " yyyy-MM-dd hh:mm:ss " ;
5          PlaceHolder1.Controls.Add(timedisplay);
6 
7      }

 

此时vs2008提示说:

错误 3 找不到类型或命名空间名称“TimeDisplay”(是否缺少 using 指令或程序集引用?) E:\练习\ASP.NET3.5高级编程\Chapter15\Default.aspx.cs 12 36 E:\...\Chapter15\

看到这个错误让我很摸不着头脑,于是我很暴力的运行了一下,结果通过了。

结果如下:

2009-12-20 04:32:16

为什么为这样呢,编译器提示缺少命名空间的错误,可是编译却没有出错也能够正常运行,那为什么vs2008却出现错误提示呢,怎么做才能让编译器不报错呢?虽然能够运行,但是看着编译器给画出的一道道红线心里就是不爽,不知哪位高手能指导下,谢谢!

 

 

 

你可能感兴趣的:(用户)