Axe*_*Axe 1 lazy-loading orchardcms
我一直在关注这篇文章为了让我的头围绕T的Lazy字段,我想我理解,但是我无法获得以这种方式加载的零件的相关字段数据
目标 - 在博客文章中显示博客文章作者的照片.
对于第一部分,我创建了内容类型,并使用懒惰的Filed of UserPart来获取用户名.但是,当我尝试获取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));
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能用这样的东西访问该领域
(ImageUploadField.Fields.ImageUploadField)Author.Fields.FirstOrDefault(x => x.Name =="Photo");
在部分类中形成
(虽然这会让每件事都变得有点脆弱,但是对于一个字段名称进行硬编码,但我不确定它是如何进行的)
更多信息
我有一个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;
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我可以为加载到惰性字段中的部分做同样的事情.
首先转换为动态,然后语法变得更加简单: ((dynamic)part.ContentItem).NameOfTheType.NameOfTheField.NameOfTheProperty
| 归档时间: |
|
| 查看次数: |
1377 次 |
| 最近记录: |