2010-08-01 88 views
2

在我目前的項目(ASP.Net 2.0)中,我有很多網絡用戶控件,其中包括「Office.ascx」。爲什麼ASP.Net不能識別我的用戶控件?

guide_controls_display_Office o = (guide_controls_display_Office)LoadControl("Office.ascx"); 

我加載它變成了Office.ascx使用此行登記的控制:

<%@ Register TagName="office" TagPrefix="uc" Src="Office.ascx" %> 

但我得到這個

Office.ascx使用此行加載到另一個控制器啓動網頁時出錯:

Unable to cast object of type 'ASP.guide_controls_display_office_ascx' to type 'guide_controls_display_Office'. 

爲什麼我會收到此消息?我可以看到第一種類型有「ASP」。在它前面。這是正常的嗎?

回答

1

看來這是一個已知的問題。我必須清除臨時文件並重建項目,以使錯誤消息消失,「一段時間」。

Unable to cast object of type 'X' to type 'X' - ASP.NET

最終的解決方案似乎是接口。建立與您需要的方法的接口或抽象類,讓你的用戶控件實現接口,然後使用接口/抽象類加載控件:

Control c = LoadControl("~/guide/controls/display/Office.ascx"); 
AOffice io = c as AOffice; 
io.ID = "office_" + i.ToString(); 
offices.Controls.Add(io); 

io.DisplayEdit = displayedit; 
+0

+1張貼解決這個 – citronas 2010-08-01 18:47:19

+0

但有對這個非常惱人的問題的永久性解決方案? – 2010-08-04 20:50:18

+0

有。我更新了答案。 – 2010-08-14 08:10:33

相關問題