2012-01-05 24 views
2

in Sitecore我有一個模板,我創建了一堆FieldRenderer。基本上有時價值沒有被填充,所以我想隱藏其中的div,我會怎麼做呢?sitecore如果FieldRenderer沒有值,不要顯示它

+0

你使用的是用戶控件還是xslt? – marto 2012-01-05 12:35:10

+0

嗨馬託,使用用戶控件 – David 2012-01-05 12:51:15

回答

2

有幾種方法取決於你使用它的頻率。

  1. (以構建非數據綁定模板化服務器控件here is a tutorial跳直)創建一個自定義模板控件調用CustomFieldRenderer到你可以將顯示模板。在這種情況下該屬性返回空白,您可以隱藏整個控制
  2. 如果只有單個頁面我會創建一個文本,並從代碼中設置背後的價值這樣

的HTML將

<asp:Literal Mode="PassThrough" runat="server" Id="SitecoreField"> 
<div>{0}</div> 
</asp:Literal> 

後面的代碼會是這樣

string value = FieldRenderer.Render(Sitecore.Context.Item, "FieldName"); 
SitecoreField.Visible = string.IsNullOrEmpty(value) == false; 
SitecoreField.Text = string.Format(SitecoreField.Text, value); 
+0

嗨馬託,感謝您的答覆。在開始工作時遇到一些麻煩,認爲我對某件事產生了誤解!使用以下: 的

和: 字符串值= FieldRenderer.Render(Sitecore的。 Context.Item,「Phone」); Phone.Visible = string.IsNullOrEmpty(value)== false; Phone.Text = string.Format(Phone.Text,value); 電話是字段名稱 – David 2012-01-05 14:38:06

+0

您似乎缺少佔位符{0}。字面應該是'

{0}

' – marto 2012-01-05 15:43:31

+0

啊哈!謝謝,非常感謝! – David 2012-01-05 15:59:09

8

這是假設的背景項目,但需要在您的方案更改的項目參考:

ASCX

<asp:Panel ID="pnlMyField" runat="server"> 
    <sc:FieldRenderer FieldName="My Field" runat="server" /> 
</asp:Panel> 

ascx.cs

pnlMyField.Visible = !string.IsNullOrEmpty(Sitecore.Context.Item["My Field"]); 
2

我創建了一個控制專門用於此目的。基本上和Mark的答案一樣,但不需要代​​碼隱藏。

<e:Enclosure runat="server"> 
    <div> 
    <sc:FieldRenderer runat="server" FieldName="My Field" /> 
    </div> 
</e:Enclosure> 

現在,當FieldRenderer沒有任何輸出時,div也不會顯示。 代碼和更多的解釋可以在我的博客上找到:http://wensveen.wordpress.com/2011/05/27/toggling-boilerplate-html-visibility-in-asp-net/

對不起,無恥的插頭,但我認爲這可能會有所幫助。

+0

如果是無恥的話,不要後悔;) - 感謝鏈接/帖子。好東西。 – al3xnull 2013-02-08 14:17:16

相關問題