2010-01-14 21 views
5

Come si modifica un progetto ASP.NET MVC 2.0 per lavorare con Spark View Engine?Spark-View-Engine con ASP.NET MVC2

ho provato come descritto qui: http://dotnetslackers.com/articles/aspnet/installing-the-spark-view-engine-into-asp-net-mvc-2-preview-2.aspx

Ma in qualche modo cerca ancora di strada per .aspx file.

Ecco il codice della mia global.asax:

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 

    } 

    protected void Application_Start() 
    { 
     SparkViewFactory svf = new SparkViewFactory(); 
     PrecompileViews(svf); 

     AreaRegistration.RegisterAllAreas(); 

     RegisterRoutes(RouteTable.Routes); 
    } 

    public static void PrecompileViews(SparkViewFactory svf) 
    { 
     var controllerFactory = svf; 
     var viewFactory = new SparkViewFactory(controllerFactory.Settings); 
     var batch = new SparkBatchDescriptor(); 
     batch 
      .For<HomeController>() 
      .For<AccountController>(); 
     viewFactory.Precompile(batch); 
    } 
} 

}

+0

sembra che nessuno abbia una soluzione per questo problema, consente di attendere il rilascio :( – Sasha

+0

Questo è temporaneamente interrotto nelle versioni più recenti di ASP.NET MVC 2. Vedere http://stackoverflow.com/questions/2138583/cant-set -up-asp-net-mvc-2-rc-e-spark-view-engine per una soluzione temporanea che è possibile utilizzare nel frattempo – Eilon

risposta

3

http://www.simple-talk.com/community/blogs/asiemer/archive/2010/01/31/89132.aspx

ho dovuto scaricare il codice sorgente del motore vista scintilla (http://sparkviewengine.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27600). Una volta fatto ciò, ho analizzato tutti i progetti che avevano un riferimento alla versione 1.0 dell'assembly System.Web.Mvc e sono stati aggiornati per fare riferimento a System.Web.Mvc 2.0. Da lì puoi costruire la soluzione (in Visual Studio) e scoprirai che un sacco di test iniziano a fallire. Puoi provare a correggerli (aggiungendo il parametro aggiuntivo TextWriter che troverai ora è necessario). Vedrai anche che il file SparkView.cs si lamenta di un parametro mancante. Nel metodo Render (linea 100 del codice sorgente ho scaricato) ho dovuto aggiornare l'istanza del wrappedViewContext per assomigliare a questo (aggiungi scrittore alla fine dell'elenco dei parametri):

public void Render(ViewContext viewContext, TextWriter writer) 
{ 
    var wrappedHttpContext = new HttpContextWrapper(viewContext.HttpContext, this); 

    var wrappedViewContext = new ViewContext(
     new ControllerContext(wrappedHttpContext, viewContext.RouteData, viewContext.Controller), 
     viewContext.View, 
     viewContext.ViewData, 
     viewContext.TempData, 
     writer); // <-- add the writer to the end of the list of parameters 

    ... 
} 

volta che il codice è aggiornato puoi eseguire lo script build.cmd che si trova nella radice della fonte che hai scaricato. Il processo di compilazione creerà un file zip nella cartella build/dist. Prendi quelle nuove dll e aggiungile al tuo sito web. Le cose dovrebbero funzionare ancora una volta.

+0

Grazie. Btw tua il libro è fantastico. – Ben

2

È necessario registrare il Viewengine:

ViewEngines.Engines.Add(new SparkViewFactory()); 
+0

Hmm ho già provato. Risultato: Metodo non trovato: 'Sistema vuoto. Web.Mvc.ViewContext..ctor (System.Web.Mvc.ControllerContext, System.Web.Mvc.IView, System.Web.Mvc.ViewDataDictionary, System.Web.Mvc.TempDataDictionary) '. – Ben

+0

@ben è rotto solo temporaneamente L'autore di SparkViewEngine sta lavorando su una correzione ma è un po 'impegnato in questi giorni. – Eilon

0

mie global.asax.cs contiene questo:

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 

    } 

    protected void Application_Start() 
    { 
     RegisterRoutes(RouteTable.Routes); 
     ViewEngines.Engines.Add(new SparkViewFactory()); 

    } 
} 

e il mio web.config contiene questo:

<configSections> 
    <section name="spark" type="Spark.Configuration.SparkSectionHandler, Spark"/> 
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
      <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
      <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
       <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/> 
       <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
       <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
       <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
      </sectionGroup> 
     </sectionGroup> 
    </sectionGroup> 
</configSections> 

<spark> 

    <pages> 
     <namespaces> 
      <add namespace="System"/> 
      <add namespace="System.Collections.Generic"/> 
      <add namespace="System.Linq"/> 
      <add namespace="System.Web.Mvc"/> 
     </namespaces> 
    </pages> 
</spark> 
+0

Hmm ho provato.Il risultato è stato: Metodo non trovato: 'Void System.Web.Mvc.ViewContext..ctor (System.Web.Mvc.ControllerContext, System.Web.Mvc.IView, System.Web.Mvc.ViewDataDictionary, System.Web.Mvc .TempDataDictionary)'. – Ben

+0

Sto usando MVC2, forse è diverso per MVC1. – RedFilter

+0

Sto usando MVC2 troppo :-( – Ben

0

vorrei guardare i campioni viene fornito con il pacchetto Spark-1.0.zip. Guardando uno di loro ha casualmente questo nei Global.asax.cs

SparkEngineStarter.RegisterViewEngine(); 

Speranza che aiuta.

1

Se hai voglia di farcela da solo, c'è una correzione su sparkview google group.

Personalmente aspetterei la prossima versione.

Problemi correlati