Может ли ASP.NET MVC View использовать модель из другого проекта?

asp.net-mvc entity-framework

Вопрос

У меня есть класс ADO.NET Entity Framework под названием Node в проекте WPF. Я хочу использовать его в другом проекте 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: «Заголовок» не является членом «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
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow