我正在使用最初从CodeBetter.Canvas项目开始的 ASP.NET MVC 项目 - 我正在尝试迁移到 ASP.NET MVC 2。我使用Eilon 的升级工具成功升级了我的项目,迁移到 VS2010(虽然尚未到 .NET 4)。
我目前遇到的问题仅在使用火花视图引擎时发生。这是我的 View.spark 中的相关代码(强类型):
${Html.EditorFor(e => e)}
如果我使用 .aspx 视图,同样的代码也可以正常工作:
<%= Html.EditorFor(e => e) %>
这里的重点是“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): error CS1061: 'System.Web .Mvc.HtmlHelper' 不包含'EditorFor' 的定义,并且找不到接受'System.Web.Mvc.HtmlHelper' 类型的第一个参数的扩展方法'EditorFor'(您是否缺少 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);
此外,我在我的 spark 视图中引用 System.Web.Mvc.Html,如另一个 SO answer中所述。
<use namespace="System.Web.Mvc.Html" />