2017-03-02 31 views
0

當我們從java平臺切換到sitecore時,我有一些關於參數的問題。這很容易在jsp中完成,但我找不到sitecore的解決方案。 (實現由外部合作伙伴完成)Sitecore MVC:將參數傳遞給佔位符

在我CSHTML,我包括通過佔位符,功能等要素:@ Html.Sitecore()佔位符(「Placholdername」)

元素包括作爲佔位符也可以包含其他元素作爲佔位符。

所以問題是:我可以傳遞一些參數以及那些佔位符嗎? 就像我的父元素有一個特定的變量集,例如「我= 5」,我想將這個變量傳遞給作爲佔位符包含的元素,並將它傳遞給佔位符中包含的元素? A包括B作爲佔位符並且傳遞「i = 5」並且B包括C作爲佔位符並且傳遞「i = 5」,因此在C中「i」的值是「5」,因爲「我在A.

」設置爲‘5’開出電流coremedia平臺我可以簡單地使用類似: <cm:include self="${self}" view="asdf"> <cm:param name="i" value="5"/> </cm:include>

編輯: 我想實現的是以下幾點:比如我有以下結構:帶有變量i = 5的頁面框架cshtml,然後將網格作爲佔位符並將變量傳遞給網格。網格然後做一些數學,如i = i + 5(應該等於10),然後包含作爲佔位符的傳情並將新的i = 10傳遞給傳情等。

+0

你檢索從Sitecore的值,然後將它傳遞給不同的看法:

這在這裏一點更詳細的論述? –

+0

不,該值在基礎cshtml文件中設置,應傳遞給所有子元素。 – user2626547

+0

我想實現的是以下內容: 例如,我有以下結構:變量i = 5的頁面框架,其中包含網格作爲佔位符並將該變量傳遞給網格。網格然後做一些數學計算,例如i = i + 5(它應該等於10),然後包含一個作爲佔位符的傳情並將新的i = 10傳遞給傳情,等等...... – user2626547

回答

0

您應該設置值模型中的i。然後,所有不同的視圖或部分視圖都應該繼承相同的模型。

0

您可以將參數分配給效果圖,但不能佔位符。佔位符應該被視爲一個漏洞。你可以動態地把東西放進去,但是你不能給它分配參數。這裏有這方面的一個討論:https://sitecore.stackexchange.com/questions/2098/add-rendering-parameters-to-placeholder/2101

我至少能想到兩種方法來解決你的問題:

  1. 雖然你的問題是缺乏詳細一點,它看起來像你這樣不一定需要佔位符,因爲你已經知道你要在這些空間內渲染什麼。如果是這樣的話,那麼你可以靜態綁定你的MVC視圖,而不是使用佔位符。這不是一種常見的做法,但在Sitecore's latest training素材and elsewhere中提到這是一種優化您不需要佔位符靈活性的方法。這通常使用@Html.Sitecore.Rendering助手完成。
  2. 您可以通過利用好舊的HttpContext.Items collection來使用一個全局變量。
+0

詳細信息:網站上的每個組件需要知道它在自舉網格系統中的寬度。 因此可以說頁面框架中有一個帶有佔位符的col-8,所以應該將8/12傳遞給我放置佔位符的元素。在這個佔位符中,我放置了一個兩列col-6的網格,它在兩列中都有佔位符來放入其他組件。 因此,網格接收8/12作爲父母的寬度,並應將「8/12 * 6/12」傳遞給網格中的組件,以便組件「知道」它們的網站寬度爲4/12。 沒有中間的網格,組件會知道它的8/12寬。 – user2626547

+1

您是否可以不使用CSS來根據需要設置組件的樣式?例如'.col-8 .col-6 .component-style'?你需要在C#代碼中訪問這些細節嗎? – jammykam

0

您可以添加參數ViewData字典,在控制器的操作方法:

public ActionResult MyPage() 
{ 
    ContextService.Get().GetCurrent().ViewData.Add("MyKey", "MyValue"); 
    return View(); 
} 

然後,任何景觀效果圖可以從ViewData訪問參數:

@{ 
    var value = ViewData["MyKey"].Value; 
} 

或者,如果你'使用Controller Renderings,添加一些代碼從父頁面獲取ViewData,並將其添加到當前的ViewData實例中:

public ActionResult ChildRendering() 
{ 
    // Get any ViewData previously added to this ViewContext 
    var contextViewData = ContextService.Get().GetCurrent().ViewData; 
    contextViewData.ToList().ForEach(x => ViewData.Add(x.Key, x.Value)); 
    return View(); 
} 

您的ViewData內容現在將在視圖文件中可用。 https://chrisperks.co/2017/03/06/a-workaround-for-missing-viewdata-in-sitecore-mvc/