2013-06-27 27 views
6

tôi đã tự hỏi nếu có cách nào để tĩnh gọi một Xem Rendering tương tự như cách bạn thường gọi là sublayout sử dụng đoạn mã sau các hình thức web:tĩnh Xem render trong Sitecore 6,6

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

tôi đã cố gắng làm này:

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

Nhưng tôi không thể mạnh mẽ loại hiển thị chế độ xem trừ khi tôi cũng tạo mục hiển thị trong sitecore và cũng tạo mục mô hình trong sitecore vì tôi sẽ nhận được và báo lỗi. Tôi muốn biết nếu có một cách tương tự đơn giản, tôi có thể sử dụng với MVC để gõ tĩnh nội bộ renderers.

Trả lời

12

Cách tiếp cận hiển thị bên dưới cho phép xem dao cạo bị ràng buộc tĩnh đối với các mục trình bày mà không tạo mục kết xuất.

Trong tập tin layout.cshtml tĩnh ràng buộc một cái nhìn dao cạo mà không có một mục trình bày Xem Rendering trong Sitecore và chỉ định một mục DataSource:

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

Quan điểm StandaloneRendering.cshtml dao cạo trông như thế này:

@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> 

Sau đây là kết quả đầu ra trên trang:

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 

Một vài điều cần biết khi làm điều này:

  1. Các trường Sitecore được kết xuất ra bởi quan điểm dao cạo không thể chỉnh sửa trong trang Page Editor.
  2. Tôi nghi ngờ rất nhiều rằng đầu ra StandaloneRendering.cshtml sẽ biến nó thành bộ nhớ cache HTML Sitecore.
  3. Thuộc tính Item trong khối @functions phải được di chuyển đến một số nơi để có thể sử dụng lại trên nhiều chế độ xem dao cạo.
  4. Đó là phương pháp không chuẩn. Điều này có thể gây nhầm lẫn cho một số người mong muốn tìm thấy một mục kết xuất được hiển thị trong Sitecore.
+1

Tại sao công việc hiển thị độc lập, ở đâu khi hiển thị với một mục tương ứng thì không? Ngoài ra, không có cách nào để cung cấp một mục Sitecore liên quan cho kết xuất được sử dụng, ngay cả khi nó không thể chỉnh sửa trong trình chỉnh sửa trang? –

+2

Tôi tin rằng phương pháp này cũng hoạt động nếu tệp dao cạo cũng được thiết lập dưới dạng hiển thị chế độ xem trong Sitecore, tức là nó có một mục hiển thị chế độ xem là đường dẫn trỏ tới nó. Từ bài viết gốc của bạn, tôi đã giả định rằng bạn đã theo một cách trọng lượng nhẹ để tĩnh gọi ra các quan điểm dao cạo mà cũng có thể nhận được một tham số nguồn dữ liệu. Bạn có thể làm rõ những gì bạn đang tìm kiếm để làm và cũng có lỗi bạn đang thấy, cảm ơn –

+0

Điều này về cơ bản sẽ làm những gì tôi đang tìm kiếm mặc dù tôi đang tìm kiếm một phương pháp được xây dựng trong thực hiện điều này. bởi một mô hình triển khai IRenderingModel. Chúng tôi đã kết thúc bằng cách sử dụng các mô hình glassmapper và xây dựng chúng tự động bằng cách sử dụng thay đổi được xây dựng trong đường ống tạo mô hình. Những Chế độ xem này không thực sự đặc biệt là hiển thị chế độ xem trong anyway nên chúng tôi có thể sử dụng PartialViews để đạt được mục tiêu của mình. Bằng cách này, chúng ta chỉ có thể vượt qua mô hình và PartialView có thể chỉ render như MVC bình thường. – IAreATomKs