2010-08-18 10 views
4

Je tente de mettre à niveau mon application Web ASP.net MVC 2 existante à MVC 3 afin que je puisse utiliser la bonté qui est le Razor Viewengine et d'autres améliorations said.Mise à niveau de MVC 2 à MVC 3 problèmes avec les vues

Après avoir utilisé le convertisseur pour convertir mon application de MVC2 à MVC3 Je rencontre des problèmes avec mon point de vue fortement typés. À titre d'exemple ici, nous avons un contrôle utilisateur de vue qui est fortement typée à la classe Profil

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Profile>" %> 

Lors de la compilation Je reçois

Compiler Error Message: CS1061: 'object' does not contain a definition for 'folio' and no extension method 'folio' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?) 

qui correspond à cette ligne à mon avis alt text

C'est comme si les vues n'acceptaient plus un type. Cela se passe avec les commandes utilisateur et les vues complètes.

J'ai vérifié à la fois web.config et vues/web.config et les deux semblent référencer la version 3.0.0.0 System.Web.Mvc

Toute aide serait appréciée!

Voir ci-dessous pour les captures d'écran de web.configs

alt text

alt text

alt text

+0

Exactement, assurez-vous que vous avez également mis à jour Views \ Web.config il a résolu le problème pour moi, merci! –

Répondre

4

Au hasard essayez de changer votre bindingRedirect à

<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" /> 
+0

Cela n'a pas aidé mais je suis d'accord qu'un tout nouveau projet mvc 3 utilise ceci au lieu des doubles entrées DependAssembly pour 1.0 à 2.0 et 2.0 à 3.0 –

+0

Ouais, je suppose que je n'aurais jamais su que c'était un bug ... c'était la seule vraie différence entre ma config et la tienne qui aurait pu être pertinente. – Buildstarted

7

Ceci est un bug dans MVC 3 Preview 1, et sera abordé dans la prochaine version. Dans l'intervalle, vous pouvez réorganiser vos pages de manière à ce que la directive <% @ Control%> soit la dernière du fichier et que cela ne vous pose aucun problème.

+0

Cela semble donc en faire un aperçu non utilisable. Il semble aussi que c'est peut-être pour la même raison que l'intellisense n'est plus intacte dans la vue. –

+0

@Phil, l'aperçu devrait toujours être utilisable pour votre scénario avec la solution de contournement que Brad a suggéré. Mes excuses pour le derangement! – Eilon

+0

Donc, le déplacement vers le bas a résolu certaines de mes pages, mais d'autres avaient tampons ne peuvent pas être des exceptions nuls étant jetés dans System.IO.MemoryStream ..... cas, il n'est pas prêt pour le développement même à mon humble avis. J'ai plus d'une centaine de vues et de contrôles et ce serait un cauchemar de déplacer la ligne directive vers le bas, même si elle était fiable à 100% –

5

J'ai simplement remplacé le web.config dans mon dossier « Vues » (avec un d'un projet MVC3 nouvellement créé) que la migration a suggéré et cela a fonctionné pour moi. Je n'étais pas prêt à déplacer toutes les déclarations vers le bas car mon projet était trop grand.

J'espère que cela vous sera utile même si c'est probablement trop tard pour vous. Peut-être que ça aide les autres ...

+0

ouais cela fonctionne maintenant que le bug est corrigé –

+0

+1 Cela a corrigé pour moi. Merci! –

+0

Cela devrait être la réponse acceptée, merci – BeardinaSuit

0

J'ai eu exactement le même problème et après avoir tiré mes cheveux un peu, trouvé et suivi de la solution Wiaan. Travaillé parfaitement, et le site est de retour. Assez drôle pas ce changement sur nos boîtes de dev n'a pas brisé notre site - c'était seulement quand nous l'avons déplacé vers un serveur de transfert qu'il a fait surface.

0

Si votre projet est basé sur MVC4 ou en utilisant Framwork 4 déjà, créez mvc4 projet vide. Et puis remplacez web.config dans le dossier des vues. Cela fonctionne immédiatement. Merci, Wianne. Depuis que j'ai une sorte d'ancienne application qui utilisait aspx plutôt que rasoir. Après avoir mis à niveau Framework 3 à 4, j'ai eu cette erreur.