2013-06-27 42 views
6

我想知道是否有任何的方式来静态调用查看类似渲染,你将如何使用下面的网页表单代码调用sublayout:静态视图效果图在Sitecore的6.6

<sc:Sublayout Path="~/sublayouts/samplesublayouts.ascx" DataSource="SomeItemId" runat="server" /> 

我试着做这样的:

@Html.Sitecore().ViewRendering("~/renderings/samplerendering.cshtml", new { DataSource= "SomeItemId"}) 

但我不能强类型的视图渲染,除非我也是在Sitecore的创建渲染项和也创造Sitecore的模型项目,因为我会收到和错误。我想知道是否有类似的简单方式,我可以使用MVC静态键入内部渲染器。

回答

12

下面显示的方法允许将剃须刀视图静态绑定到演示文稿项目而不创建渲染项目。

layout.cshtml文件静态绑定不具有在Sitecore的视图渲染演示项目,并指定一个DataSource项的Razor视图:

@Html.Sitecore().ViewRendering("/views/StandaloneRendering.cshtml", new { DataSource = "/sitecore/content/Home/My Datasource Item" }) 

StandaloneRendering.cshtml Razor视图看起来是这样的:

@using Sitecore.Mvc.Presentation 
@model RenderingModel 

@functions 
{ 
    public Sitecore.Data.Items.Item Item 
    { 
     get 
     { 
      var item = Sitecore.Context.Item; 

      if (!string.IsNullOrEmpty(Model.Rendering.DataSource)) 
      { 
       item = Sitecore.Context.Database.GetItem(Model.Rendering.DataSource); 
      } 
      return item; 
     } 
    } 
} 

<p>Item Name: @Model.PageItem.Name</p>  
<p>Datasource Path: @Model.Rendering.DataSource</p>  
<p>Datasource Item Name: @Item.Name</p> 
<p>Datasource Item Path: @Item.Paths.FullPath</p> 
<p>Datasource Item Template: @Item.TemplateName</p> 

以下是页面上的输出:

Item Name: Home 

Datasource Path: /sitecore/content/Home/My Datasource Item 

Datasource Item Name: My Datasource Item 

Datasource Item Path: /sitecore/content/Home/My Datasource Item 

Datasource Item Template: Sample Item 

几件事情要注意这样做时:

  1. 由Razor视图所呈现出来的Sitecore的字段是不是在页面编辑器中修改。
  2. 我非常怀疑StandaloneRendering.cshtml输出会将其放入Sitecore HTML缓存中。
  3. @functions块中的Item属性应该移动到某个位置,以便它可以在多个剃须刀视图中重复使用。
  4. 这是一个非标准的方法。这可能会让一些想要在Sitecore中找到关联呈现项目的人混淆。
+1

为什么独立渲染工作,作为与相应项目的渲染没有?另外,即使在页面编辑器中无法编辑,是否也无法为使用的渲染提供关联的Sitecore项目? –

+2

我相信,如果剃刀文件也被设置为Sitecore中的视图渲染,也就是说,它有一个视图渲染项,它的路径指向它。从你原来的文章中,我认为你是在一个轻量级的方式来静态调用剃须刀视图,也可以接收数据源参数。你能澄清你正在寻求做什么,以及你看到了什么错误,谢谢 –

+0

这基本上会做我在找的东西,虽然我一直在寻找一个内置的方法来做到这一点,该项目可以自动处理通过实施IRenderingModel的模型。我们最终使用了glassmapper模型,并使用内置模型自动构建模型,更改了模型生成管道。这些视图对于无论如何都是视图渲染并不特别,所以我们能够使用PartialView来实现我们的目标。这样我们就可以传递模型本身,PartialView可以像正常的MVC一样渲染。 – IAreATomKs