1

私はVS2010にWebサイトプロジェクトを持っています。要するに、1つのコントロール「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
{
    //...
}

次に、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 コントロールを見つけることができると思います。でもできないんです。

4

1 に答える 1

2

あなたは using ステートメントで正しい軌道に乗っています。ただし、クラス名で using ステートメントを実行する代わりに、コントロールの名前空間を使用する必要があります。

usercontrols_Global_BasketMenuItem コントロールのコード ビハインド (.cs) を開くと、コード ファイル内の名前空間句を探すことで、含める必要がある名前空間を見つけることができるはずです。

また、そのファイルで、クラス名が「usercontrols_Global_BasketMenuItem」であるか「BasketMenuItem」であるかを確認する必要があります。後者の可能性が高いようです。

名前空間がない場合は、「global::」名前空間を使用してその方法でアクセスするか、using ステートメントでエイリアスを作成してみてください。詳細については、この投稿を参照してください: C# で名前空間のないクラスを明示的に参照する

ただし、更新して名前空間を追加することを強くお勧めします。アーキテクチャ的には、適切な名前空間構造があれば、コードベースを操作して同様のクラス名を使用する方がはるかに簡単であることがわかります。

于 2012-08-16T13:26:16.207 に答える