0

我正在尝试在我的子布局中创建一些自定义代码。

我要建立一个通讯,通讯可以组成多篇文章。一篇文章可以由标题/子标题/标题和图像组成。

可以,因为副标题或图片不是强制性的。为了避免时事通讯电子邮件中出现任何空白/丢失图像,我想根据内容创建一个特定的 HTML。

如果没有图片,不显示Image控件,如果没有Sub title,不显示Sub Title控件;

为此,我使用了以下不起作用的代码:(

    Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.Item home = master.GetItem("/sitecore/content/Home");

if(home != null && home.Fields != null)
{
string name = home.Fields["Image"].Name; -> Which Fields["Image"] returns null.
}

是否有另一种方法来检索所选文章的字段?由于我的代码根本不起作用,我不明白如何检索所选项目的字段值。

谢谢你。

4

2 回答 2

2

在您的示例中, home.Fields 只是检查以确保 Fields 集合存在。在尝试提取名称之前,您没有检查 Image 字段中是否存在值。

你可能需要这样的东西:

if(home != null && home.Fields != null && home.Fields["Image"] != null)
{
   string name = home.Fields["Image"].Name;
}

根据您的评论,您似乎实际上是在尝试从组件的数据源中提取图像字段。如果您想在这种情况下做某事之前有条件地检查图像字段,那么我想处理很多可能的空异常。代码可能应该是这样的:

var parent = ((Sitecore.Web.UI.WebControl)Parent);
if(parent != null){
   Item dataSourceItem = string.IsNullOrWhiteSpace(parent.DataSource) ? null : Sitecore.Context.Database.GetItem(parent.DataSource);

   if(dataSourceItem != null && dataSourceItem.Fields != null && dataSourceItem.Fields["Image"]!=null){
       string name=dataSourceItem.Fields["Image"].Name;
   }
}
于 2012-10-25T13:03:43.810 回答
0

这是一种简单的方法:

Sitecore.Context.Item.Fields["You field name"]
于 2020-06-19T12:45:54.117 回答