Question

Ceci est étrange. J'ai changé quelque chose (pas sûr de ce) et maintenant le point de vue de mon application ne compile pas à l'exécution.

La vue elle-même est fortement typée:

<%@ Page Language="C#"
         MasterPageFile="~/Views/Shared/Site.Master"
         Inherits="System.Web.Mvc.ViewPage<MyNamespace.OperatorModel>" %>

Quand je visite la page, il ne parvient pas à compiler, en disant:

  

CS1061: « objet » ne contient pas de définition de « Log » et aucune méthode d'extension « Log » accepter un premier argument de type « objet » n'a pu être trouvée (vous manque une directive à l'aide ou une référence d'assemblage?)

erreur standard Jolie. La ligne de code source correspondant est:

<%= Html.HiddenFor(model => model.Log) %>

Quand je regarde le code généré par le compilateur, je vois que la classe de base de la vue est pas fortement typé:

[System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
public class views_operator_create_aspx
    : global::System.Web.Mvc.ViewPage, // NOT STRONGLY TYPED
      System.Web.SessionState.IRequiresSessionState,
      System.Web.IHttpHandler {

Alors, ma question est, ce qui provoque le compilateur vue d'ignorer mon attribut Inherits sur la définition de la vue?

Je tiens à souligner que d'autres points de vue sur le même contrôleur travaillent, et ils ont exactement la même déclaration page comme je l'ai montré ci-dessus.

EDIT Est-ce que quelqu'un sait où le code source généré des vies de fichiers, en supposant qu'il est conservé quelque part?

EDIT J'ai trouvé le coupable (dans ma réponse ci-dessous) mais je ne peux pas savoir pourquoi cela se passe. Si quelqu'un peut expliquer que je vous en serais reconnaissant!

Était-ce utile?

La solution 4

Ok donc je Pared moi à ceci:

<%@ Page Language="C#"
         MasterPageFile="~/Views/Shared/Site.Master"
         Inherits="System.Web.Mvc.ViewPage<MyNamespace.OperatorModel>" %>
<%@ Import Namespace="MyNamespace.Data" %>

<asp:Content ContentPlaceHolderID="MainContent" runat="server">
    <%= GetType() %><br />
    <%= GetType().BaseType %><br />
    <%= GetType().BaseType.BaseType %>
</asp:Content>

La sortie était, même avec tous les domaines de contenu vide:

  

ASP.views_operator_create_aspx
  System.Web.Mvc.ViewPage
  System.Web.UI.Page

Mais si je retire la ligne <%@ Import, je reçois ceci:

  

ASP.views_operator_create_aspx
  System.Web.Mvc.ViewPage`1 [MyNamespace.OperatorModel]
  System.Web.Mvc.ViewPage

Je ne sais pas pourquoi l'importation doit faire la page ne soit plus fortement typé. Quelqu'un peut-il expliquer? Des conseils sur la façon de déboguer ou tracer la compilation serait bien. Il est grand que je peux garder le codage maintenant, mais ce n'est pas une fin très satisfaisante au problème.

Autres conseils

Êtes-vous le référencement OperatorModel correctement dans votre web.config? Cela vous permettra de OperatorModel de référence explicitement.

<namespaces>
    <add namespace="My.Namespace"/>

Sinon, vous pouvez changer votre valeur Inherits à:

Inherits="System.Web.Mvc.ViewPage<My.Namespace.OperatorModel>"

En outre, lors du passage d'un objet modèle à la vue, assurez-vous de vérifier null ou retourner un OperatorModel vide:

return View(operatorModel 
    ?? new OperatorModel() { Text = "I can has not found!" });

Je trouve quand j'ai des erreurs tout à fait bizarres comme ça, parfois si je supprime la copie d'ombre de tous mes fichiers il éclaircir. Vous trouverez à l'adresse:

%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files

Replace quelle que soit la version du cadre que vous utilisez dans cette ligne ci-dessus. Supprimez tous les fichiers qui correspondent à votre projet (ou simplement supprimer tout dans le répertoire).

Vous pouvez devoir fermer votre service W3P pour être sûr qu'il LÂCHE de tous les fichiers et vous pouvez le supprimer.

En outre, je crois que vous trouverez le code source généré que vous cherchez là-dedans.

Vous ne est pas arrivé de supprimer ce fichier spécial, web.config magique qui vit à la racine de votre / Vues dossier, avez-vous?

[Cette capture me au moins une fois par mois]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top