2010-01-14 44 views
5

Làm thế nào để bạn sửa đổi một dự án ASP.NET MVC 2.0 để làm việc với Spark View Engine?Spark-View-Engine với ASP.NET MVC2

tôi đã cố gắng như mô tả ở đây: http://dotnetslackers.com/articles/aspnet/installing-the-spark-view-engine-into-asp-net-mvc-2-preview-2.aspx

Nhưng bằng cách nào đó nó vẫn cố gắng để định tuyến để .aspx tập tin.

Ở đây mã của global.asax của tôi:

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

giống như không ai có giải pháp cho vấn đề này, cho phép chờ phát hành: ( – Sasha

+0

Điều này tạm thời bị hỏng trong các bản phát hành gần đây nhất của ASP.NET MVC 2. Xem http://stackoverflow.com/questions/2138583/cant-set -up-asp-net-mvc-2-rc-và-spark-view-engine cho một workaround bạn có thể sử dụng trong khi chờ đợi – Eilon

Trả lời

3

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

tôi phải tải về xem tia lửa mã nguồn động cơ (http://sparkviewengine.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27600). Một khi tôi đã làm điều đó tôi đã đi qua từng dự án đã có một tham chiếu đến phiên bản 1.0 của System.Web.Mvc lắp ráp và cập nhật để tham chiếu đến điểm để System.Web.Mvc 2.0. Từ đó bạn có thể xây dựng giải pháp (trong studio trực quan) và bạn sẽ thấy rằng một loạt các thử nghiệm bắt đầu thất bại. Bạn có thể cố gắng sửa chúng (bằng cách thêm tham số TextWriter bổ sung mà bạn sẽ thấy bây giờ là cần thiết). Bạn cũng sẽ thấy rằng tệp SparkView.cs phàn nàn về một tham số bị thiếu. Trong Render phương pháp (dòng 100 của mã nguồn tôi đã tải về) Tôi đã phải cập nhật các instantiation của wrappedViewContext trông như thế này (thêm nhà văn đến cuối danh sách các thông số):

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 

    ... 
} 

Khi mã được cập nhật, bạn có thể chạy tập lệnh build.cmd nằm trong thư mục gốc của nguồn bạn đã tải xuống. Quá trình xây dựng sẽ tạo một tệp zip trong thư mục build/dist. Lấy những dll mới và thêm chúng vào trang web của bạn. Mọi thứ sẽ hoạt động lại một lần nữa.

+0

Cảm ơn Btw cuốn sách là tuyệt vời. – Ben

2

Bạn cần phải đăng ký Viewengine:

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

Hmm tôi đã cố gắng.Nó đã dẫn đến: Phương pháp không tìm thấy: '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 điều này chỉ bị hỏng Tác giả của SparkViewEngine đang cố gắng khắc phục nhưng anh ấy hơi bận rộn trong những ngày này – Eilon

0

global.asax.cs My chứa này:

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

    } 
} 

và web.config của tôi chứa nội dung này:

<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 tôi đã thử.Nó dẫn đến: Phương thức không tìm thấy: 'Void System.Web.Mvc.ViewContext..ctor (System.Web.Mvc.ControllerContext, System.Web.Mvc.IView, System.Web.Mvc.ViewDataDictionary, System.Web.Mvc .TempDataDictionary) '. – Ben

+0

Tôi đang sử dụng MVC2, có lẽ nó khác với MVC1. – RedFilter

+0

Tôi đang sử dụng MVC2 quá :-( – Ben

0

Tôi sẽ xem các mẫu đi kèm với gói Spark-1.0.zip. Nhìn vào một trong số họ ngẫu nhiên có điều này trong Global.asax.cs

SparkEngineStarter.RegisterViewEngine(); 

Hy vọng điều đó sẽ hữu ích.

1

Nếu bạn ưa thích lăn của riêng mình thì có bản sửa lỗi trên sparkview google group.

Cá nhân tôi sẽ chờ bản phát hành tiếp theo.

Các vấn đề liên quan