1

我真的很喜欢 Spark,但我们已经在基于 Web 表单的视图上投入了大量资金。我想开始使用 Spark,而无需预先转换所有现有视图。

让 Spark 与 webforms 并行工作的唯一问题是母版页。目前,我的 spark 布局是 1 对 1 的母版页副本。

这种重复数量是不可接受的。我已经被它咬过好几次了。

有什么方法可以让 spark 视图在 webforms master 中工作?或者让 web 表单视图在 spark 布局中工作?要么解决重复问题。

4

5 回答 5

5

我完成此操作的方法是将母版页的大部分内容移动到部分视图中,然后有两个母版页:Foo.Master 和 Foo.Master.spark,它们都使用相同的 Html.RenderPartial() 调用. 两个母版具有相同命名的内容区域。这让我可以将任一引擎用于给定视图,并使重复尽可能小。

单个视图引擎应同时处理其主视图和视图。对 IViewEngine 的调用是:

FindView(System.Web.Mvc.ControllerContext controllerContext, string viewName, string masterName, bool useCache)

它不会将主视图与视图分开。

Spark 使用它来将 master 编译到视图中,并通过其多通道渲染实现其他技巧。

于 2010-01-25T15:39:57.720 回答
1

我不这么认为。从架构上讲,两者在呈现页面时具有完全不同且相互冲突的方式。要实现它,您需要做一些与 iFrame 等效的操作,这是一种非常笨拙的方式,可以使其成为反模式。

在读取母版页时,火花引擎已经完成,反之亦然。

您可以尝试模仿在 spark 引擎中呈现母版页的方式。不仅仅是视觉上......我说的是使用 spark 拼凑一个自制的母版页预处理器。锄头不是一件容易的事。

于 2009-10-08T13:43:33.943 回答
0

只是一个想法,尝试编写一个自定义视图引擎(或调整 Spark 的),它将使用 Spark 引擎呈现请求的 .spark 视图,然后调用 WebForms 引擎将呈现的内容传递给它 - 我认为这应该是可能的,但我有对这些内部结构一无所知。一种更简单的方法是将呈现的 .spark HTML 保存到 .aspx 并让 WebForms 选择它 - 但性能将无法接受。

无论如何,我想说这应该是可能的,但是 1) 需要对视图引擎进行复杂的调整,以及 2) 你会失去很多 Spark/layouts 功能,因为你的 .spark 视图将大部分呈现为根本没有 spark 布局。

另外,尝试在 Spark 邮件列表中询问。

于 2009-10-08T17:26:30.000 回答
0

这有什么好运气吗?

我已经能够在火花视图的 System.Web.Mvc.ViewUserControl 调用 Html.RenderView() 中托管火花视图。我敢打赌,我也可以使用 Html.RenderView() 在 System.Web.Mvc.ViewUserControl 中托管 Spark 视图。这引入了一些共享母版页的选项(全部带有开销):

  1. 为您的 .spark 视图编写一个简单的包装器 .ascx。他们有相同的模型对象,包装器可以在包装的视图上调用 HtmlRenderPartial。

  2. (反之亦然)为您的 .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 可能会挖掘出一些可以一起工作的接口。

于 2009-11-05T04:02:57.067 回答
0

您可以将现有母版页与一个非常简单的 .aspx 页面一起使用,该页面只需调用 Html.RenderPartial("MySparkView") 即可让您在现有母版页中激发内容。

于 2009-11-21T21:12:57.550 回答