9
votes

Utilisation de ASP.NET MVC 2 Caractéristiques avec le moteur de vue d'étincelles

Je travaille avec un projet ASP.NET MVC qui a été lancé à l'origine à partir du CodeBetter.canvas Projet - Et j'essaie de passer à asp.net MVC 2. J'ai mis à niveau avec succès mon projet à l'aide de L'outil de mise à niveau de Eilon < / a>, déplacé vers VS2010 (bien que pas encore à .NET 4).

Le problème que j'ai actuellement ne se produit que lorsque vous utilisez le moteur de vue d'étincelles. Voici le bit de code pertinent à mon avis.Spark (fortement typé): xxx

le même bit de code fonctionne juste bien si j'utilise une vue .aspx: xxx

le point majeur ici étant "éditeur" est nouveau dans ASP.NET MVC 2 et dans mon projet, je peux utiliser cet assistant dans une vue ASPX, mais Pas une vue sur l'étincelle.

J'ai essayé Mise à niveau d'étincelle pour utiliser MVC 2 (ainsi que MVCCONTRIB et NIJJECT), pensant que c'était peut-être un de ceux qui paniquaient - mais jusqu'à présent pas de chance - je vois toujours la même chose Comportement.

Voici le message d'erreur complet qui est jeté de la classe BatchCompiler de la Spark Spark.

La compilation de la vue dynamique a échoué. (0,0): AVERTISSEMENT CS1701: En supposant référence de référence 'system.web.mvc, Version = 1.0.0.0, culture = neutre, PublickeyToken = 31bf3856ad364E35 ' Matchs 'System.Web.mvc, Version = 2.0.0.0, culture = neutre, PublickeyToken = 31bf3856ad364E35 ', vous Peut avoir besoin de fournir une politique d'exécution C: \ inetpub \ wwwroot [myProject] \ codebetter.canvas.web \ vues [myentité] \ View.Spark (9,16): Erreur CS1061: 'System.web.mvc.htmlHelper' ne fait pas contenir une définition pour 'éditeur pour " et aucune méthode d'extension 'éditeur' Accepter un premier argument de type 'System.web.mvc.htmlhelper' pourrait être trouvé (avez-vous manqué une utilisation directive ou une référence d'assemblage?)

Voici le code associé à mon global.asax: xxx

aussi, je me référende système.web.mvc.html dans ma vue d'étincelle Comme mentionné dans une autre réponse . < / p> xxx


1 commentaires

Je pense que le vrai problème ici était que j'avais pensé à tort que la version de MVCContriberb que j'utilisais consistait à utiliser la version 2.0.0 de system.web.mvc.dll - ce n'était pas! Merde! Après avoir mis à jour cela, Spark et Ninject - Ça fonctionne!


6 Réponses :


1
votes

Lorsque vous avez téléchargé les nouvelles sources d'étincelles, vous l'avez-vous reconsurée en utilisant des assemblages MVC 2? Avez-vous remplacé les références dans Spark Project?


7 commentaires

Oui - J'ai réaffirmé la phrase dans ma question qui a déclaré "surcridé à la dernière version de Spark" à "Spark améliorée pour utiliser MVC 2" pour clarifier ce que je voulais dire là. J'ai recompanté la source d'étincelles avec des références MVC 2 et incorporé les assemblées résultantes dans mon projet MVC et mis à jour ses références. Aucun changement de message d'erreur. J'ai également examiné les assemblées utilisées dans mon projet dans le réflecteur pour vérifier qu'ils sont référencés System.Web.mvc version 2.0.0.0.


Avez-vous passé le modèle pour voir? Avez-vous défini «»?


Voici le contenu complet de ma vue:

Entity

Nom < H4> $ {modèle.name} $ {html.editorifor (e => e)} Retour


Et pour clarifier - j'ai une vue.aspx et une vue.Spark - Pour tester l'un ou l'autre, je viens de renommer celui que je ne veux pas utiliser pour autre chose. ASPX Works, Spark ne semble pas être un test valide pour que tout ce qui implique fonctionne correctement jusqu'à ce que j'utilise la vue d'étincelle au lieu de la vue ASPX. Merci pour votre aide et vos pensées, BTW. C'est très apprécié - j'ai été soulevé dessus pendant un certain temps maintenant.


J'ai du mal à construire une nouvelle version de Spark. Quel type est htmlHelper dans la vue d'étincelles? Est-ce HTMLHELPER OT HTMLHELPER ?


Merci encore pour passer du temps à ce sujet. Comme il s'avère, lorsque vous téléchargez et utilisez la dernière version de Spark, il existe un assemblage compilé contre System.Web.MVC.dll v2.0.0 qui est prêt à être utilisé.


J'ai reconstruit les dernières sources d'étincelles et remplacée la référence par Spark.Web.mvc2 mais je reçois maintenant des erreurs de syntaxe étranges telles que: la compilation de la vue dynamique a échoué. Erreur CS1002 :; attendu . Quelqu'un a une idée sur la façon de résoudre ce problème? (Sparkt Dernières sources à compter de ce jour: 1.0.39966.0)



1
votes

Essayez spécifiant la référence System.Web.mvc dans Web.Config au lieu du fichier global.ascx.cs afin de pouvoir spécifier la version spécifique: xxx

ceci devrait empêcher l'étincelle de travailler du tout si la mauvaise version de l'assemblage MVC est chargée de quelque part.

Si l'assemblage MVC 1.0 est dans le GAC, vous pouvez le nettoyer et le recharger comme suit:

(à partir de l'invite de commande Visual Studio) xxx

espère que cela aide,

Jeff français


3 commentaires

J'ai ce qui suit dans la section System.Web> Assemblages de mon web.config - est-ce suffisant? Si non, pouvez-vous élaborer comment / pourquoi ajouter la section au web.config?


L'ajout de la section à la web.config est une autre façon de spécifier les paramètres. Il est équivalent à ce que vous avez dans votre fichier global.aSax (c.-à-d. Paramètres de var dans les nouvelles SparkSettings () ...). La raison pour laquelle j'ai suggéré de déplacer vos paramètres sur la section Web.Config est que vous pouvez spécifier le nom de montage puissant et le taper au lieu de simplement dire à Spark de rechercher System.Web.mvc. Notez également qu'il s'agit d'une référence d'assemblage dans Spark en plus des références d'espace de noms que vous avez déjà spécifiées dans le fichier global.asax.


Merci pour la clarification Jeff. C'était très utile, mais cela n'a pas permis de résoudre directement mon problème (je devais rechercher et détruire toutes les références à l'ancienne version de l'assembly System.Web.mvc pour Real ). Et vous avez raison, si vous suivez cette étape, il tue l'étincelle partout si la version 1.0 de System.Web.MVC.dll est référencée.



2
votes

J'ai récemment converti mon projet Spark en ASP.NET MVC 2. Je ne vois pas dans ce que vous avez écrit que vous avez écrit de l'utilisation de Spark.Web.mvc à Spark.Web.mvc2.

juste pour être clair, spark.web.mvc2 est le projet qui doit être recompanté avec le nouvel assembly System.Web.mvc.

J'ai eu des problèmes avec IntelliSense jusqu'à ce que je retire toutes les références de l'assemblage et de l'espace de noms de Web.config et de les mettre dans le fichier global.Spark et avait ajouté l'attribut pageBasetype = "spark.web.mvc2.sparkview" à l'étincelle > Noeud de pages dans le web.config.

J'espère que tout cela aide.


1 commentaires

Merci pour l'info, j'ai vérifié que la dernière version de Spark fait, en fait, inclure Spark.Web.mvc2.dll, qui références System.web.mvc.dll v 2.0.0. J'ai pu utiliser cela avec succès dans mon projet, mais j'avais toujours par erreur l'avaient négligé une autre référence à V1.0.0 ailleurs!



9
votes

Le problème sous-jacent est qu'une assemblée version 1.0.0 est toujours référencée quelque part dans le projet.

en utilisant réflecteur pour examiner chaque dépendance des assemblages, j'ai trouvé (si vous " Reting avec le projet CodeBetter.canvas) Il existe des trois projets dépendants à mettre à jour pour utiliser la version 2.0.0 de System.Web.MVC.dll

  1. étincelle . Téléchargez la dernière version d'étincelle de TeamCity et d'utiliser le spark.web.mvc2.dll (quelles références system.web.mvc.dll 2.0.0) Lien vers des instructions détaillées.

  2. mvccontrib . Téléchargez la dernière version de mvccontribe ( version de téléchargement , < un href = "http://github.com/mvccontrib/mvccontrib" rel = "nofollow noreferrer"> Source de téléchargement ) qui fait référence à la system.web.mvc.dll 2.0.0.

  3. ninject . Téléchargez la dernière version de ninject et recompiler la solution VS Après avoir mis à jour la référence au 2.0.0 version de system.web.mvc.dll

    Maintenant, remplacez les assemblages de ces dépendances dans votre projet et mettez à jour les références du projet si nécessaire. Tout devrait être bien.


1 commentaires

Merci Ian, j'ai le même problème et corrigé en suivant vos méthodes. Il y avait une assemblée qui références System.Web.MVC.dll v1.0.



0
votes

J'ai essayé beaucoup de choses mentionnées ci-dessus, mais je ne pouvais tout simplement pas obtenir une DLL dépendante que mes vues utilisées (et également référencées MVC 1.0.0.0) pour utiliser le MVC 2.0.0.0, alors voici ce que vous avez fixé pour moi. ..

J'ai téléchargé le code Spark et ajouté la ligne suivante dans le fichier BatchCompiler.cs dans la méthode Compile: P>

compilerParameters.CompilerOptions = "/nowarn:1701";


0 commentaires

1
votes

Ce sont les étapes que j'ai prises pour résoudre le problème avec un nouveau projet MVC 2 et Spark 1.1:

  1. Compilez contre MVC 2.0 Strong> - J'ai vérifié les références pour vous assurer que je voudrais être liée à MVC 2 et non MVC 1. Depuis c'était un nouveau projet, ce n'était pas un problème. p> li>

  2. System.web.mvc.html STROND> - J'ai ajouté System.web.mvc.html vers la configuration Spark, pour vous assurer que l'espace de noms a été ajouté à toutes les vues. P >

    dans global.asax.cs applicatif_start p>

    <viewdata model="MyModelType" />
    
  3. ajoutez le modèle tapé fort> - Assurez-vous de taper le modèle de vue d'étincelles. Dans ASPX, cela se fait avec les hérités de la déclaration de page, comme ceci: p>

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


0 commentaires