ASP.NET MVCビューは別のプロジェクトのモデルを使用できますか?

asp.net-mvc entity-framework

質問

WPFプロジェクトには、NodeというADO.NET Entity Frameworkクラスがあります。同じソリューション内の別のASP.NET MVCプロジェクトで使用したいです。

私のノードコントローラ:

Public Class NodeController
    Inherits System.Web.Mvc.Controller

    Function Display(ByVal id As Guid) As ActionResult
        Dim db As New WpfApplication1.Model1Entities
        Dim m As WpfApplication1.Node = (From n In db.Node _
                                         Where n.Id = id _
                                         Select n).First
        Return View(m)
    End Function

End Class

プロジェクトを実行してhttp://.../Node/Display/[a valid ID]に移動しhttp://.../Node/Display/[a valid ID]

表示アクションでエラーが発生します。

'/'アプリケーションでサーバーエラーが発生しました。

コンパイルエラー

コンパイラエラーメッセージ:BC30456: 'タイトル'は 'ASP.views_node_display_aspx'のメンバーではありません。

ソースエラー:

1行目:<%@ Page Title = "" Language = "VB" MasterPageFile = "〜/ Views / Shared / Site.Master" Inherits = "System.Web.Mvc.ViewPage(Of WpfApplication1.Node)"%>

ソースファイル:C:... \ MvcApplication1 \ Views \ Node \ Display.aspx

このエラーは、クラス名の衝突が原因で発生している可能性があります。しかし、それはここでは当てはまりません。

厳密に型指定されたASP.NET MVCビューを作成するために、別のプロジェクトのモデルを使用することはできませんか?

更新1:

Display.aspxページでネームスペースをインポートしようとしましたが、どれも

<%@ Import Namespace="WpfApplication1" %>

または

<%@ Import Namespace="SolutionName.WpfApplication1" %>

または

<%@ Import Namespace="SolutionName.WpfApplication1.Model1Entities" %>

エラーを防ぐ

更新2:

Views / Web.configファイルに名前空間を追加してみた

<add namespace="SolutionName.WpfApplication1" />

また

<add namespace="SolutionName.WpfApplication1.Model1Entities" />

エラーを防ぐ

更新3:

名前空間を追加したので、私は今この警告を受けます:

Importsの 'SolutionName.WpfApplication1'で指定されているネームスペースまたはタイプにパブリックメンバーが含まれていないか、見つかりません。名前空間または型が定義されていて、少なくとも1つのパブリックメンバーが含まれていることを確認してください。インポートした要素名がエイリアスを使用していないことを確認してください。

それは手がかりですか?

アップデート4:

私はWpfApplication1から新しいClassLibrary1にモデルを移動しました。

コントローラをクリーンアップしました。

Imports ClassLibrary1

Public Class NodeController
    Inherits System.Web.Mvc.Controller

    Function Display(ByVal id As Guid) As ActionResult
        Dim db As New Model1Entities
        Dim m As Node = (From n In db.Node _
                         Where n.Id = id _
                         Select n).First
        Return View(m)
    End Function

End Class

ビューを整理しました。

<%@ Import Namespace="ClassLibrary1" %>
<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of Node)" %>

警告は表示されなくなりました。

しかし、それでもランタイムエラーが発生します。

人気のある回答

あなたのViews / Web.configがあなたの参照されたプロジェクトの名前空間を持っていることを再確認してください:

<system.web>
  <pages>
    <namespaces>
      <add namespace="SolutionName.WpfApplication1.Model1Entities" />
    </namespaces>
  <pages>
</system.web>

更新:

これをテストするためのWPFアプリケーションはありません... "Class Library"プロジェクトを使用しようとしていると思いました。それは間違いなくうまくいきます。自分のプロジェクトに "モデル"を引き出すためにあなたのアプリケーションをわずかにリファクタリングすることは可能ですか?そうすれば、クラスライブラリとしてコンパイルできます。

アップデート2:

奇妙なことに、まるであなたのページがSystem.Web.Mvcから正しく継承されていないかのようです。 Views / Web.configがこのようになっていることを確認してください。

<?xml version="1.0"?>
<configuration>

  <system.web>
    <httpHandlers>
      <add path="*" verb="*"
          type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>
    <pages validateRequest="false"
            pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
            pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
            userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
      <namespaces>
        <add namespace="SolutionName.WpfApplication1.Model1Entities"/>
      </namespaces>
    </pages>

  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
    </handlers>
  </system.webServer>
</configuration>

アップデート3:ランタイムエラーは、MVCプロジェクトではないようです。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ