我在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控件。但我不能。
答案 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#
但是,我强烈建议更新以添加命名空间。从架构上讲,如果你有合适的命名空间结构,你会发现使用你的代码库更容易,并且有类似的类名。