1

以下は、Presentation という名前のプロジェクト内の私のコードです。また、EntityFramework によって生成されたクラスを持つ MyNamespace および MyNamespace2 (同じソリューション内) という名前の別のプロジェクトもあります。MyNamespace プロジェクトの参照を Presentation プロジェクトに追加しました。

1: <asp:Repeater ID="MyRepeater" runat="server" ItemType="MyNamespace.MyEntityClass" SelectMethod="SelectMethod">
2:     <ItemTemplate>
3:         <li><a href="<%# Item.Link %>">
4:             <%# Item.Text %>
5:         </a></li>
6:     </ItemTemplate>
7: </asp:Repeater>

属性の後の引用符内で IntelliSense を使用しようとするとItemType、MyNamespace2 からリストされたクラスのみが取得されますが、MyNamespace からはクラスが取得されません。また、この Web アプリケーションを実行しようとすると、上記のコードを含むページに移動すると、正常にビルドされても次のエラーが発生します。

Compiler Error Message: CS0246: The type or namespace name 'MyNamespace' could not be found (are you missing a using directive or an assembly reference?)

興味深いことに、デザイナ内では、IntelliSense はItemのプロパティで動作するため、 の型Itemは実際にはデザイナによって正しく解決されました。

ここで何が問題なのですか?ありがとう。

4

1 に答える 1

2

問題が見つかりました。プレゼンテーションで他のプロジェクト (MyNamespace) を参照するだけでは不十分なようです。これにより、分離コード ファイルでは MyNamespace のクラスを使用できますが、aspx ファイルでは使用できません。

aspx ページでこれらのクラスを使用するために、Web.Config ファイルに次の行を追加しました。

<configuration>
....
  <system.web>
  ....
    <compilation debug="true" targetFramework="4.5">
      ....
      <assemblies>
        .....
        <add assembly="MyNamespace, Version=1.0.0.0, Culture=neutral, PublicKeyToke=null" />
      </assemblies>
    </compilation>
    ....
    <pages>
    ....
      <namespaces>
        ....
        <add namespace="MyNamespace" />
      </namespaces>
    </pages>
  </system.web>
</configuration>
于 2013-09-05T09:50:03.947 に答える