我一直在关注这篇文章,以了解 T 的惰性字段,我想我理解,但是我无法获取以这种方式加载的零件的相关字段数据
目标 - 在博客文章中显示博客文章作者的照片。
- 我想添加一个内容部分“内容作者”
- 部分编辑器应显示为果园用户的下拉列表。(不管内容所有者 cms 用户应该可以选择作者)
- 我已将图像上传字段添加到用户内容类型
- 我想在内容作者部分的视图中显示前端用户的图像
对于第一部分,我创建了内容类型并使用 UserPart 的惰性 Filed 来获取用户名。但是,当我尝试获取 UserPart 的关联字段时。似乎有任何。
public class ContentAuthorRecord : ContentPartRecord
{
public virtual string AuthorEmail { get; set; }
}
public class ContentAuthorPart : ContentPart<ContentAuthorRecord>
{
internal readonly LazyField<UserPart> Owner = new LazyField<UserPart>();
public string AuthorEmail
{
get { return Record.AuthorEmail; }
set { Record.AuthorEmail = value; }
}
public UserPart Author
{
get { return Owner.Value; }
set { Owner.Value = value; }
}
public string AuthorName
{
get
{
if (Author == null)
return "Riders for health";
else
{
return Author.UserName;
}
}
}
}
public class ContentAuthorHandler :ContentHandler
{
private readonly IContentManager _contentManager;
public ContentAuthorHandler(IRepository<ContentAuthorRecord> repository, IContentManager contentManager)
{
_contentManager = contentManager;
OnActivated<ContentAuthorPart>(SetUpCustomPart);
Filters.Add(StorageFilter.For(repository));
}
private void SetUpCustomPart(ActivatedContentContext content, ContentAuthorPart part)
{
// Setup the getter of the lazy field
part.Owner.Loader(() => _contentManager.Query<UserPart, UserPartRecord>().List().FirstOrDefault(x => x.Email == part.AuthorEmail));
}
}
我希望能够通过类似的方式访问该字段
(ImageUploadField.Fields.ImageUploadField)Author.Fields.FirstOrDefault(x => x.Name == "照片");
在零件类中形成
(虽然这让每件事都变得有点脆弱,硬编码一个字段名,但我不知道如何 eles 去做)
更多信息
我有一个 HeaderPart,其中通过显示处理程序中的 cms(不在代码中)添加了一个 Image 字段我像这样获取字段
protected override DriverResult Display(HeaderPart part, string displayType, dynamic shapeHelper)
{
if (part.HeaderType == HeaderType.Full_width_hero_image)
{
var field = (ImageUploadField) part.Fields.FirstOrDefault(f => f.Name == "HeaderImage");
if (field != null)
{
return ContentShape("Parts_Header_ImageHero",
() => shapeHelper.Parts_Header_ImageHero(ImagePath: field.ImagePath, ImageTitle: field.FileName));
}
return null;
}
if (part.HeaderType == HeaderType.Full_width_hero_video)
{
return ContentShape("Parts_Header_VideoHero", () => shapeHelper.Parts_Header_VideoHero(VideoUrl: part.VideoUrl));
}
if (part.HeaderType == HeaderType.Body_width_video)
{
return ContentShape("Parts_Header_VideoBody", () => shapeHelper.Parts_Header_VideoBody(VideoUrl: part.VideoUrl));
}
return null;
}
这行得通,但是我可以对加载到惰性字段中的部分执行相同的操作。