I have created custom variant render called “Success Story”, I create custom variant to display the “description” only, however the view display “ Description field” with no value, when I look at logs I found WARN Could not find variants for component {6D6DD358-64AF-4539-95FA-769A8CDDEB05} from page {4C5BE406-5A93-47BE-83A9-530B19F55C83}
I follow below steps: 1 - Inherit form VariantsController
public class SuccessStoryController : VariantsController
{
protected ISuccessStoryRepository SuccessStoryRespository
{ get; set; }
protected ISuccessStoryListRepository SuccessStoryListRespository
{ get; set; }
protected IVariantsRepository VariantsRespository
{ get; set; }
public SuccessStoryController()
{
SuccessStoryRespository = ServiceLocator.Current.Resolve<ISuccessStoryRepository>();
SuccessStoryListRespository = ServiceLocator.Current.Resolve<ISuccessStoryListRepository>();
VariantsRespository = ServiceLocator.Current.Resolve<IVariantsRepository>();
}
protected override object GetModel()
{
return SuccessStoryListRespository.GetModel();
}
}
public class SuccessStoryModel : VariantsRenderingModel
{
public string Title { get; set; }
public string Description { get; set; }
public string Logo { get; set; }
}public class SuccessStoryListModel : VariantListsRenderingModel
{
public List<SuccessStoryModel> SuccessStoryItems { get; set; }
}
4 - The view as below
if (!(Model.Rendering.DataSourceItem == null && !Html.Sxa().IsEdit))
{
<div @Html.Sxa().Component("SuccessStory-list", Model.Attributes)>
<div class="component-content">
@Html.Sxa().RenderHeading(Model.HeadingTag, Model.DataSourceItem, "Title", Model.GetRenderingWebEditingParams())
@if (Html.Sxa().IsEdit && Model.Rendering.DataSourceItem == null)
{
@Model.MessageIsEmpty
}
@if (Model.Rendering.DataSourceItem != null && !Model.SuccessStoryItems.Any())
{
using (Html.Sxa().BeginEditFrame(Html.Sitecore().CurrentRendering.DataSource, "Empty", Model.IsControlEditable))
{
@Model.MessageIsEmpty
}
}
@if (Model.Rendering.DataSourceItem != null)
{
<ul>
@foreach (var item in Model.SuccessStoryItems)
{
<div data-itemid="ccc">
@foreach (BaseVariantField variantField in Model.VariantFields)
{
@Html.RenderingVariants().RenderVariant(variantField, Model.Item, true)
}
</div>
}
</ul>
}
</div>
</div>
}
My parameter template inhert from :
My render as below and I add it to available render
my repo
public class SuccessStoryListRepository : ListRepository, ISuccessStoryListRepository, IModelRepository, IAbstractRepository<IRenderingModelBase>
{
public override IRenderingModelBase GetModel()
{
SuccessStoryListModel model = new SuccessStoryListModel();
this.FillBaseProperties(model);
//BindSuccessStory();
model.SuccessStoryItems = BindSuccessStory(); //this.GetItems().Select<Item, SuccessStoryModel>((Func<Item, SuccessStoryModel>)(item => new SuccessStoryModel()));
return (IRenderingModelBase)model;
}
private List<SuccessStoryModel> BindSuccessStory()
{
var items=this.GetItems().ToList();
List<SuccessStoryModel> list = new List<SuccessStoryModel>();
foreach (var item in items)
{
//item.Fields["Description"].Value;
list.Add(new SuccessStoryModel
{
Description = item.Fields["Description"].Value,
Title= item.Fields["Title"].Value
});
}
return list;
}
}