Kann eine ASP.NET-MVC-Ansicht ein Modell aus einem anderen Projekt verwenden?

asp.net-mvc entity-framework

Frage

Ich habe eine ADO.NET Entity Framework-Klasse namens Node in einem WPF-Projekt. Ich möchte es in einem anderen ASP.NET MVC-Projekt in derselben Lösung verwenden.

Mein Knoten-Controller:

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

Wenn ich das Projekt http://.../Node/Display/[a valid ID] und versuche, zu http://.../Node/Display/[a valid ID] zu navigieren

Ich bekomme einen Fehler in meiner Display-Aktion:

Serverfehler in '/' Anwendung.

Kompilierungsfehler

Compiler-Fehlermeldung: BC30456: "Title" ist kein Mitglied von "ASP.views_node_display_aspx".

Quellfehler:

Zeile 1: <% @ Page Title = "" Language = "VB" MasterPageFile = "~ / Ansichten / Freigegeben / Site.Master" Inherits = "System.Web.Mvc.ViewPage (Of WpfApplication1.Node)"%>

Quelldatei: C: ... \ MvcApplication1 \ Views \ Node \ Display.aspx

Ich habe gelesen, dass der Fehler auf einen Namenskonflikt der Codebehind-Klasse zurückzuführen ist . Aber ich glaube nicht, dass das hier der Fall ist.

Kann ich ein Modell aus einem anderen Projekt nicht zum Erstellen einer stark typisierten ASP.NET-MVC-Ansicht verwenden?

Update 1:

Ich habe versucht, den Namespace auf meiner Display.aspx-Seite zu importieren, aber keines davon

<%@ Import Namespace="WpfApplication1" %>

oder

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

oder

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

verhindern sie den fehler

Update 2:

Ich habe versucht, den Namespace zu meiner Views / Web.config-Datei hinzuzufügen, aber nicht weiter

<add namespace="SolutionName.WpfApplication1" />

Noch

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

verhindern sie den fehler

Update 3:

Seit ich den Namespace hinzugefügt habe, bekomme ich nun folgende Warnung:

Der in den Imports 'SolutionName.WpfApplication1' angegebene Namespace oder Typ enthält keine öffentlichen Member oder kann nicht gefunden werden. Stellen Sie sicher, dass der Namespace oder der Typ definiert ist und mindestens ein öffentliches Mitglied enthält. Stellen Sie sicher, dass der importierte Elementname keine Aliase verwendet.

Ist das ein Hinweis?

Update 4:

Ich habe das Modell von meiner WpfApplication1 in eine neue ClassLibrary1 verschoben.

Ich habe meinen Controller aufgeräumt.

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

Ich habe meine Ansicht aufgeräumt.

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

Ich sehe keine Warnung mehr.

Ich bekomme aber immer noch den Laufzeitfehler.

Beliebte Antwort

Überprüfen Sie, ob Ihre Views / Web.config den Namespace Ihres referenzierten Projekts hat:

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

AKTUALISIEREN:

Ich habe keine WPF-Anwendungen, um dies zu testen. Das wird auf jeden Fall funktionieren. Ist es möglich, Ihre Anwendung ein wenig zu überarbeiten, um die "Models" in ihr eigenes Projekt zu ziehen? Auf diese Weise können Sie es als Klassenbibliothek kompilieren.

UPDATE 2:

Seltsam, es ist fast so, als ob Ihre Seite nicht korrekt von System.Web.Mvc erbt. Stellen Sie sicher, dass Ihre Views / Web.config folgendermaßen aussieht:

<?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>

UPDATE 3: Der Laufzeitfehler scheint kein MVC-Projekt zu sein.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum