使用带有spark视图引擎的asp.net mvc 2功能

Ian*_*son 9 asp.net-mvc spark-view-engine

我正在使用最初从CodeBetter.Canvas项目启动的ASP.NET MVC项目- 我正在尝试迁移到ASP.NET MVC 2.我使用Eilon的升级工具成功升级了我的项目,转移到VS2010(尽管还没有.NET 4).

我目前遇到的问题只发生在使用spark视图引擎时.以下是我的View.spark中的相关代码(强类型):

${Html.EditorFor(e => e)}
Run Code Online (Sandbox Code Playgroud)

如果我使用.aspx视图,相同的代码就可以正常工作:

<%= Html.EditorFor(e => e) %>
Run Code Online (Sandbox Code Playgroud)

这里的主要观点是"EditorFor"是ASP.NET MVC 2中的新功能,在我的项目中,我可以在ASPX视图中使用该帮助程序,但不能在Spark视图中使用.

我已经尝试升级Spark以使用MVC 2(以及MvcContrib和Ninject),想想也许这是其中一个吓坏了 - 但到目前为止没有运气 - 我仍然看到相同的行为.

以下是Spark的BatchCompiler类中抛出的完整错误消息.

动态视图编译失败.(0,0):警告CS1701:假设程序集引用'System.Web.Mvc,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'匹配'System.Web.Mvc,Version = 2.0.0.0,Culture = neutral ,PublicKeyToken = 31bf3856ad364e35',您可能需要提供运行时策略c:\ inetpub\wwwroot [myproject]\CodeBetter.Canvas.Web\Views [MyEntity]\View.spark(9,16):错误CS1061:'System.Web .Mvc.HtmlHelper'不包含'EditorFor'的定义,也没有扩展方法'EditorFor'接受类型为'System.Web.Mvc.HtmlHelper'的第一个参数'(你是否缺少using指令或程序集引用) ?)

这是我的Global.asax中与Spark相关的代码:

var settings = new SparkSettings()
.AddNamespace("System")
.AddNamespace("System.Collections.Generic")
.AddNamespace("System.Web.Mvc")
.AddNamespace("System.Web.Mvc.Html")
.AddNamespace("MvcContrib.FluentHtml")
.AddNamespace("CodeBetter.Canvas")
.AddNamespace("CodeBetter.Canvas.Web")
.SetPageBaseType("ApplicationViewPage")
.SetAutomaticEncoding(true);

#if DEBUG
    settings.SetDebug(true);
#endif

var viewFactory = new SparkViewFactory(settings);
ViewEngines.Engines.Add(viewFactory);
Run Code Online (Sandbox Code Playgroud)

此外,我在我的火花视图中引用System.Web.Mvc.Html,如另一个SO答案中所述.

<use namespace="System.Web.Mvc.Html" />
Run Code Online (Sandbox Code Playgroud)

Ian*_*son 9

根本问题是版本1.0.0程序集仍在项目中的某处引用.

使用反射器检查每个程序集依赖项,我发现(如果你从CodeBetter.Canvas项目开始)有三个依赖项目需要更新才能使用2.0.0版本的system.web.mvc.dll

  1. 火花.从teamcity下载最新版本的spark并使用spark.web.mvc2.dll(引用system.web.mvc.dll 2.0.0)链接到详细说明.

  2. MVCContrib.下载引用system.web.mvc.dll 2.0.0 的最新版本的MVCContrib(下载版本,下载源代码).

  3. Ninject.下载最新版本的ninject并在更新对2.0.0版system.web.mvc.dll的引用后重新编译VS解决方案

现在,在项目中替换这些依赖项的程序集,并在必要时更新项目引用.一切都应该好.