2012-08-16 46 views
1

我在VS2010中有一個網站項目,簡而言之,我使用一個控件「BasketMenuItem.ascx」來顯示購物車詳細信息,總結在頁面頂部。什麼引用C#控制在另一個類的後面的代碼

在代碼來呈現導航,我有:

<tp:BasketMenuItem ID="basketMenuItem" runat="server" /> 

我則有另一種控制,每個產品頁面上有一個按鈕,增加了產品項目在購物車的X號。在添加項目時,我使用javascript來突出顯示購物車,然後我想刷新「BasketMenuItem」控件,以便顯示正確的細節。

我想我可以做這樣的事情( 「usercontrols_Global_BasketMenuItem」 是班裏的BasketMenuItem控制):

(usercontrols_Global_BasketMenuItem)Page.FindControl("basketMenuItem").LoadItems(); 

不過,我得到一個錯誤說:

"The Type or Namespace Name BasketMenuItem could not be found (are you missing a using directive or an assembly reference?)" 

林不確定如何解決這個問題。林不知道我需要包括,因爲我不能簡單地說:

using usercontrols_Global_BasketMenuItem; 

我也嘗試添加一個類的名稱屬性來控制文件,如下所示:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="BasketMenuItem.ascx.cs" ClassName="BasketMenuItem" Inherits="usercontrols_Global_BasketMenuItem" %> 

但我仍然不能設法引用它。

守則

首先,存在BasketMenuItem控制。 ascx和ascx.cs.這包含加載當前購物籃內容的方法。 「LoadItems()」。

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="BasketMenuItem.ascx.cs" ClassName="BasketMenuItem" Inherits="BasketMenuItem" %> 

public partial class BasketMenuItem : System.Web.UI.UserControl 
{ 
    //... 
} 

然後,有Menu控件。這就是籃控制被放置在頁面上的導航:

<ul> 
    <li>...</li> 
    <li>...</li> 
    <li>...</li> 

    <!-- Cart --> 
    <tp:BasketMenuItem ID="basketMenuItem" runat="server" /> 

</ul> 

最後,有時listItems控制,定義如下。該控件包含用於將物品添加到購物車中的按鈕。在這裏我想在頁面上找到BasketMenuItem控件,並調用它的「LoadItems()」方法來更新。

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ListItems.ascx.cs" Inherits="ListItems" %> 

public partial class ListItems : System.Web.UI.UserControl 
{ 
    //... 
} 

沒有命名空間已經指定,從我讀過我會假設我可以在ASP命名空間中找到BasketItem控件。但是我不能。

回答

2

您正在使用using語句的正確軌道。但是,不要使用類名來使用using語句,您需要使用控件的名稱空間。

如果打開usercontrols_Global_BasketMenuItem控件的代碼隱藏文件(.cs),則應該能夠通過在代碼文件中查找名稱空間子句來找到需要包含的名稱空間。

而且,在該文件中,您應該驗證類名是'usercontrols_Global_BasketMenuItem'還是'BasketMenuItem'。後者似乎更有可能。

如果你沒有命名空間,你可以嘗試使用「global ::」命名空間並以這種方式訪問​​它,或者在using語句中將其命名爲alias。有關詳細信息,請參閱此帖:explicitly refer to a class without a namespace in C#

但是,我強烈建議更新以添加名稱空間。在架構上,如果您有適當的名稱空間結構,您會發現使用代碼庫更容易,並且擁有類似的類名。

+0

嗨周杰倫,謝謝你的迴應。該類的名稱實際上是「usercontrols_Global_BasketMenuItem」,因爲這是自動生成的。控件位於/ usercontrols/Global /文件夾中。我將這個類重命名爲「BasketMenuItem」,並相應地更新了ascx文件。沒有默認的命名空間,所以作爲一個測試,我試圖向代碼隱藏中添加「namespace MyControls」(並更新控件的「inherits」屬性。然後在其他文件中嘗試使用using語句,但是「MyControls namespace wouldn' t出現 – cast01 2012-08-16 13:32:11

+0

只是爲了仔細檢查:這兩個用戶控件是否在同一個項目中?(缺少一個項目引用可以解決這個問題) – 2012-08-16 13:53:25

+0

是的,他們在同一個網站項目中,我在某處讀取默認名稱空間對於控件是ASP,但事件鍵入「ASP」並沒有提出任何有關BasketMenuItem的建議 – cast01 2012-08-16 14:00:16

相關問題