ASP.NET MVC View可以使用來自不同項目的模型嗎?

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]

我的顯示操作出錯:

'/'應用程序中的服務器錯誤。

編譯錯誤

編譯器錯誤消息:BC30456:'Title'不是'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'中指定的命名空間或類型不包含任何公共成員或無法找到。確保定義了名稱空間或類型,並且至少包含一個公共成員。確保導入的元素名稱不使用任何別名。

這是一個線索嗎?

更新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應用程序來測試它......我以為你試圖使用“類庫”項目。這肯定會奏效。是否有可能稍微重構您的應用程序以將“模型”拉出到他們自己的項目中?這樣您就可以將其編譯為類庫。

更新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合法嗎? 是的,了解原因