2010-01-14 85 views
5

你如何修改ASP.NET MVC 2.0項目,星火視圖引擎工作?火花視圖引擎使用ASP.NET MVC2

我試着喜歡這裏描述: http://dotnetslackers.com/articles/aspnet/installing-the-spark-view-engine-into-asp-net-mvc-2-preview-2.aspx

但不知何故,它仍然會嘗試路由到.aspx文件。

這裏我的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

看起來沒有人爲此問題提供解決方案,讓我們等待發布:( – Sasha 2010-01-20 07:21:54

+0

這在ASP.NET MVC 2的最新版本中暫時中斷。請參閱http://stackoverflow.com/questions/2138583/cant-set 。-up-ASP淨MVC-2,RC-和火花視圖引擎,你可以在此期間使用一種變通方法 – Eilon 2010-02-01 04:58:38

回答

3

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

我不得不下載火花視圖引擎源代碼(http://sparkviewengine.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27600)。一旦我這樣做了,我瀏覽了每個引用1.0版本System.Web.Mvc程序集的項目,並更新爲指向System.Web.Mvc 2.0。從那裏你可以建立解決方案(在Visual Studio中),你會發現一大堆測試開始失敗。您可以嘗試修復它們(通過添加您現在需要的其他TextWriter參數)。您還會看到SparkView.cs文件抱怨缺少參數。在Render方法(源代碼,我下載的行100),我不得不更新wrappedViewContext的實例,看起來像這樣(加作家的參數列表的末尾):

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 

    ... 
} 

一旦代碼已更新,您可以運行位於所下載源的根目錄下的build.cmd腳本。構建過程將在build/dist文件夾中創建一個zip文件。採取這些新的DLL,並將其添加到您的網站。事情應該再次運作。

+0

感謝。 創建它的書很棒。 – Ben 2010-02-01 15:36:19

2

您需要註冊的視圖引擎:

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

嗯,我已經嘗試過了:沒有發現 方法:「太虛系統。 Web.Mvc.ViewContext..ctor(System.Web.Mvc.ControllerContext,System.Web.Mvc.IView,System.Web.Mvc.ViewDataDictionary,System.Web.Mvc.TempDataDictionary)」。 – Ben 2010-01-14 15:31:49

+0

@ben這僅僅是破暫時的,SparkViewEngine的作者正在修復這個問題,但是他現在有點忙。 – Eilon 2010-02-01 04:57:38

0

我的global.asax.cs包含此:

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

    } 
} 

和我的web.config包含此:

<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

嗯,我試過了。它導致:未找到方法:'Void System.Web.Mvc.ViewContext..ctor(System.Web.Mvc.ControllerContext,System.Web.Mvc.IView,System.Web.Mvc.ViewDataDictionary,System.Web.Mvc .TempDataDictionary)」。 – Ben 2010-01-14 15:34:55

+0

我正在使用MVC2,或許它與MVC1不同。 – RedFilter 2010-01-14 15:40:04

+0

我使用MVC2太:-( – Ben 2010-01-14 15:41:47

0

我想看看帶有Spark-1.0.zip包的示例。看着他們的一個隨機有這樣的Global.asax.cs中

SparkEngineStarter.RegisterViewEngine(); 

希望它能幫助。

1

如果你喜歡滾動自己再有就是對sparkview google group修復。

個人而言,我會等待下一個版本。