我真的很喜欢 Spark,但我们已经在基于 Web 表单的视图上投入了大量资金。我想开始使用 Spark,而无需预先转换所有现有视图。
让 Spark 与 webforms 并行工作的唯一问题是母版页。目前,我的 spark 布局是 1 对 1 的母版页副本。
这种重复数量是不可接受的。我已经被它咬过好几次了。
有什么方法可以让 spark 视图在 webforms master 中工作?或者让 web 表单视图在 spark 布局中工作?要么解决重复问题。
我真的很喜欢 Spark,但我们已经在基于 Web 表单的视图上投入了大量资金。我想开始使用 Spark,而无需预先转换所有现有视图。
让 Spark 与 webforms 并行工作的唯一问题是母版页。目前,我的 spark 布局是 1 对 1 的母版页副本。
这种重复数量是不可接受的。我已经被它咬过好几次了。
有什么方法可以让 spark 视图在 webforms master 中工作?或者让 web 表单视图在 spark 布局中工作?要么解决重复问题。
我完成此操作的方法是将母版页的大部分内容移动到部分视图中,然后有两个母版页:Foo.Master 和 Foo.Master.spark,它们都使用相同的 Html.RenderPartial() 调用. 两个母版具有相同命名的内容区域。这让我可以将任一引擎用于给定视图,并使重复尽可能小。
单个视图引擎应同时处理其主视图和视图。对 IViewEngine 的调用是:
FindView(System.Web.Mvc.ControllerContext controllerContext, string viewName, string masterName, bool useCache)
它不会将主视图与视图分开。
Spark 使用它来将 master 编译到视图中,并通过其多通道渲染实现其他技巧。
我不这么认为。从架构上讲,两者在呈现页面时具有完全不同且相互冲突的方式。要实现它,您需要做一些与 iFrame 等效的操作,这是一种非常笨拙的方式,可以使其成为反模式。
在读取母版页时,火花引擎已经完成,反之亦然。
您可以尝试模仿在 spark 引擎中呈现母版页的方式。不仅仅是视觉上......我说的是使用 spark 拼凑一个自制的母版页预处理器。锄头不是一件容易的事。
只是一个想法,尝试编写一个自定义视图引擎(或调整 Spark 的),它将使用 Spark 引擎呈现请求的 .spark 视图,然后调用 WebForms 引擎将呈现的内容传递给它 - 我认为这应该是可能的,但我有对这些内部结构一无所知。一种更简单的方法是将呈现的 .spark HTML 保存到 .aspx 并让 WebForms 选择它 - 但性能将无法接受。
无论如何,我想说这应该是可能的,但是 1) 需要对视图引擎进行复杂的调整,以及 2) 你会失去很多 Spark/layouts 功能,因为你的 .spark 视图将大部分呈现为根本没有 spark 布局。
另外,尝试在 Spark 邮件列表中询问。
这有什么好运气吗?
我已经能够在火花视图的 System.Web.Mvc.ViewUserControl 调用 Html.RenderView() 中托管火花视图。我敢打赌,我也可以使用 Html.RenderView() 在 System.Web.Mvc.ViewUserControl 中托管 Spark 视图。这引入了一些共享母版页的选项(全部带有开销):
为您的 .spark 视图编写一个简单的包装器 .ascx。他们有相同的模型对象,包装器可以在包装的视图上调用 HtmlRenderPartial。
(反之亦然)为您的 .ascx 控件编写一个简单的包装器 .spark。
当我尝试查看 Index.spark 使用母版页 Site.Master 时,我收到错误消息:
The view 'Index' or its master could not be found. The following locations were searched:
~/Views/LfgSettings/Index.aspx
~/Views/LfgSettings/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
Layouts\Site.spark
Shared\Site.spark
我不知道这些路径代表什么,它看起来像索引视图的搜索路径及其母版页的搜索路径。似乎 .spark 文件不能使用 .master 母版页。
我想知道是否可以编写一个包装器 .master 文件来调用具有正确内容区域的 .spark 文件。一些 Reflector'ing 可能会挖掘出一些可以一起工作的接口。
您可以将现有母版页与一个非常简单的 .aspx 页面一起使用,该页面只需调用 Html.RenderPartial("MySparkView") 即可让您在现有母版页中激发内容。