引用C#控制另一个类后面的代码

时间:2012-08-16 12:58:00

标签: c# user-controls reference code-behind

我在VS2010中有一个网站项目,简而言之,我使用一个控件“BasketMenuItem.ascx”来显示购物车详细信息,总结在页面顶部。什么

在渲染导航的代码中,我有:

<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;

我也尝试过将ClassName属性添加到控件文件中,如下所示:

<%@ 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
{
    //...
}

然后,有菜单控件。这是Basket控件放置在导航页面上的位置:

<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控件。但我不能。

1 个答案:

答案 0 :(得分:2)

您使用using语句走在正确的轨道上。但是,不是使用带有类名的using语句,而是需要使用控件的命名空间。

如果打开usercontrols_Global_BasketMenuItem控件的代码隐藏(.cs),您应该能够通过在代码文件中查找namespace子句来找到需要包含的命名空间。

此外,在该文件中,您应该验证类名是“usercontrols_Global_BasketMenuItem”还是“BasketMenuItem”。后者似乎更有可能。

如果您没有名称空间,可以尝试使用“global ::”命名空间并以这种方式访问​​它,或者在using语句中对其进行别名处理。有关详细信息,请参阅此帖子:explicitly refer to a class without a namespace in C#

但是,我强烈建议更新以添加命名空间。从架构上讲,如果你有合适的命名空间结构,你会发现使用你的代码库更容易,并且有类似的类名。