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项目。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因