2010-01-14 18 views
5

¿Cómo se modifica un proyecto ASP.NET MVC 2.0 para que funcione con Spark View Engine?Spark-View-Engine con ASP.NET MVC2

Me trataron como se describe aquí: http://dotnetslackers.com/articles/aspnet/installing-the-spark-view-engine-into-asp-net-mvc-2-preview-2.aspx

Pero de alguna manera todavía intenta encaminar a .aspx archivos.

Aquí el código de mi 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

parece que nadie tiene solución para este problema, espere liberación :( – Sasha

+0

Esto se rompe temporalmente en las versiones más recientes de ASP.NET MVC 2. Vea http://stackoverflow.com/questions/2138583/cant-set -up-asp-net-mvc-2-rc-y-spark-view-engine para una solución alternativa que puede usar mientras tanto. – Eilon

Respuesta

3

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

tuve que descargar el código fuente del motor vista chispa (http://sparkviewengine.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27600). Una vez que lo hice, revisé cada uno de los proyectos que tenían una referencia a la versión 1.0 del ensamblado System.Web.Mvc y los actualicé para hacer referencia a System.Web.Mvc 2.0. Desde allí puedes construir la solución (en Visual Studio) y encontrarás que un montón de pruebas comienzan a fallar. Puede intentar repararlos (al agregar el parámetro adicional TextWriter que encontrará que ahora se necesita). También verá que el archivo SparkView.cs se queja de un parámetro faltante. En el método Render (línea 100 del código fuente que he descargado) que tenía que actualizar la creación de instancias de la wrappedViewContext a tener este aspecto (añadir escritor hasta el final de la lista de parámetros):

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 

    ... 
} 

vez que el código se actualiza, puede ejecutar el script build.cmd que se encuentra en la raíz de la fuente que descargó. El proceso de compilación creará un archivo zip en la carpeta build/dist. Tome esos dll nuevos y agréguelos a su sitio web. Las cosas deberían funcionar una vez más.

+0

Gracias. Por cierto su el libro es genial – Ben

2

Es necesario registrar el Viewengine:

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

Hmm, ya lo intenté. Resultó en: Método no encontrado: 'Void System. Web.Mvc.ViewContext..ctor (System.Web.Mvc.ControllerContext, System.Web.Mvc.IView, System.Web.Mvc.ViewDataDictionary, System.Web.Mvc.TempDataDictionary) '. – Ben

+0

@ben esto está roto solamente El autor de SparkViewEngine está trabajando en una solución pero está un poco ocupado estos días. – Eilon

0

Mis global.asax.cs contiene esto:

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()); 

    } 
} 

y mi web.config contiene esto:

<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, lo intenté.Resultó en: Método no encontrado: 'Void System.Web.Mvc.ViewContext..ctor (System.Web.Mvc.ControllerContext, System.Web.Mvc.IView, System.Web.Mvc.ViewDataDictionary, System.Web.Mvc .TempDataDictionary) '. – Ben

+0

Estoy usando MVC2, tal vez es diferente para MVC1. – RedFilter

+0

estoy usando MVC2 demasiado :-( – Ben

0

Me gustaría ver las muestras viene con el paquete Spark-1.0.zip. En cuanto a uno de ellos tiene al azar esto en los Global.asax.cs

SparkEngineStarter.RegisterViewEngine(); 

espero que ayude.

1

Si te gusta rodar el tuyo, entonces hay una solución en el sparkview google group.

Personalmente, esperaría el próximo lanzamiento.

Cuestiones relacionadas