2012-08-16 49 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

相关问题