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

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

用户控件: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 { getset; }
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     }

 

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

16:22:34
 
但是如果我想在动态加载用户控件的时候要指定这个用户控件的 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却出现错误提示呢,怎么做才能让编译器不报错呢?虽然能够运行,但是看着编译器给画出的一道道红线心里就是不爽,不知哪位高手能指导下,谢谢!

 

 

 

posted on 2009-12-20 16:36  卜俊生  阅读(589)  评论(4编辑  收藏  举报