1

我在 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。这包含加载当前购物篮内容的方法。“加载项()”。

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

4

1 回答 1

2

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

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

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

如果您没有命名空间,您可以尝试使用“global::”命名空间并以这种方式访问​​它,或者在 using 语句中为其设置别名。有关详细信息,请参阅此帖子:在 C# 中显式引用没有命名空间的类

但是,我强烈建议更新以添加命名空间。从架构上讲,如果您有适当的命名空间结构,您会发现使用代码库和拥有相似的类名会容易得多。

于 2012-08-16T13:26:16.207 回答