Spark视图引擎是否可以与webforms母版页进行互操作?

时间:2009-10-08 13:24:39

标签: asp.net-mvc spark-view-engine

我非常喜欢Spark,但我们已经对基于网络表单的视图进行了大量投资。我想开始使用Spark而不必事先转换我现有的所有视图。

让Spark与webforms并肩工作的唯一问题是母版页。 Currenly我有火花布局,1对1页重复的母版页。

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

有没有办法让火花视图在webforms master中工作?或者webforms视图在spark布局中工作?要么解决重复问题。

5 个答案:

答案 0 :(得分:5)

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

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

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

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

Spark使用它来将master编译为视图,并通过其多遍渲染将其他技巧编译。

答案 1 :(得分:1)

我不这么认为。在架构上,两者具有完全不同且相互矛盾的呈现页面的方式。为了实现这一目标,你需要做一些相当于iFrame的事情,这种方式使得它成为一种反模式。

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

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

答案 2 :(得分:0)

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

无论如何,我认为它应该是可能的但是1)将需要复杂的视图引擎调整和2)你将失去很多Spark /布局功能,因为你的.spark视图将主要呈现为没有火花布局所有

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

答案 3 :(得分:0)

运气好吗?

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

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

  2. (反之亦然)为.ascx控件编写一个简单的包装.spark。

  3. 当我尝试使用视图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'可能会挖掘出一些可以协同工作的接口。

答案 4 :(得分:0)

您可以使用现有的母版页,其中包含一个非常简单的.aspx页面,该页面只需调用Html.RenderPartial(“MySparkView”)即可在现有母版页中获取火花内容。