Une vue ASP.NET MVC peut-elle utiliser un modèle provenant d'un projet différent?

asp.net-mvc entity-framework

Question

J'ai une classe ADO.NET Entity Framework appelée Node dans un projet WPF. Je souhaite l'utiliser dans un autre projet ASP.NET MVC au sein de la même solution.

Mon contrôleur de nœud:

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

Lorsque http://.../Node/Display/[a valid ID] le projet et que j'essaie d'accéder à http://.../Node/Display/[a valid ID]

Je reçois une erreur sur mon action d'affichage:

Erreur serveur dans l'application '/'

erreur de compilation

Message d'erreur du compilateur: BC30456: "Titre" n'est pas membre de "ASP.views_node_display_aspx".

Erreur de source:

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

Fichier source: C: ... \ MvcApplication1 \ Views \ Node \ Display.aspx

J'ai lu que cette erreur peut être due à un conflit de nommage de la classe codebehind . Mais je ne pense pas que ce soit le cas ici.

Ne puis-je pas utiliser un modèle provenant d'un autre projet pour créer une vue ASP.NET MVC fortement typée?

Mise à jour 1:

J'ai essayé d'importer l'espace de noms sur ma page Display.aspx, mais aucun

<%@ Import Namespace="WpfApplication1" %>

ou

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

ou

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

empêcher l'erreur.

Mise à jour 2:

J'ai essayé d'ajouter l'espace de noms à mon fichier Views / Web.config, mais

<add namespace="SolutionName.WpfApplication1" />

ni

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

empêcher l'erreur.

Mise à jour 3:

Depuis l'ajout de l'espace de noms, je reçois maintenant cet avertissement:

L'espace de nommage ou le type spécifié dans les importations 'SolutionName.WpfApplication1' ne contient aucun membre public ou est introuvable. Assurez-vous que l'espace de noms ou le type est défini et contient au moins un membre public. Assurez-vous que le nom de l'élément importé n'utilise aucun alias.

Est-ce un indice?

Mise à jour 4:

J'ai déplacé le modèle de mon WpfApplication1 vers une nouvelle ClassLibrary1.

J'ai nettoyé mon contrôleur.

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

J'ai nettoyé ma vue.

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

Je ne vois plus l'avertissement.

Mais j'obtiens toujours l'erreur d'exécution.

Réponse populaire

Vérifiez deux fois que votre Views / Web.config a l'espace de noms de votre projet référencé:

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

METTRE À JOUR:

Je n'ai aucune application WPF pour tester cela ... Je pensais que vous tentiez d'utiliser un projet "Class Library". Cela fonctionnera certainement. Est-il possible de modifier légèrement votre application pour extraire les "modèles" dans leur propre projet? De cette façon, vous pouvez le compiler en tant que bibliothèque de classes.

MISE À JOUR 2:

Bizarre, c'est presque comme si votre page n'héritait pas correctement de System.Web.Mvc. Assurez-vous que votre Views / Web.config ressemble à ceci:

<?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: L'erreur d'exécution semble ne pas être un projet MVC.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow