Error executing template "/Designs/Swift/Paragraph/Swift_ArticleListFilter.cshtml"
System.ArgumentNullException: Value cannot be null. (Parameter 'source')
at System.Linq.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
at System.Linq.Enumerable.TryGetNonEnumeratedCount[TSource](IEnumerable`1 source, Int32& count)
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
at CompiledRazorTemplates.Dynamic.RazorEngine_85a81e5e3c5047519976f67ec5974fb6.GetSelectedLists()
at CompiledRazorTemplates.Dynamic.RazorEngine_85a81e5e3c5047519976f67ec5974fb6.ExecuteAsync()
at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel>
@functions {
private List<Dynamicweb.Frontend.ItemViewModel> GetSelectedLists()
{
var selectedLists = Model.Item?.GetList("Lists")?.GetRawValue().OfType<string>();
var lists = new List<Dynamicweb.Frontend.ItemViewModel>();
if (selectedLists.Any())
{
foreach (var list in selectedLists)
{
var page = Dynamicweb.Content.Services.Pages?.GetPage(Dynamicweb.Core.Converter.ToInt32(list)) ?? null;
var viewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(page)?.Item ?? null;
if (viewModel != null)
{
lists.Add(viewModel);
}
}
}
return lists;
}
private string GetCheckboxIcon()
{
string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/";
var icon = $"<span class=\"icon-2\">{@ReadFile(iconPath + "check.svg")}</span>";
return icon;
}
private string RenderHeader()
{
var header = string.Empty;
if(!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle"))
{
string titleFontSize = Model.Item.GetRawValueString("TitleFontSize", "h3");
string headingLevel = Model.Item.GetString("HeadingLevel", "h2");
string headingLevelStart = $"<{headingLevel} class=\"{titleFontSize} mb-3\">";
string headingLevelStop = $"</{headingLevel}>";
header += @headingLevelStart;
header += Model.Item.GetString("Title");
header += @headingLevelStop;
}
return header;
}
}
@{
var query = Dynamicweb.Context.Current.Request.QueryString?.Get("list");
var style = Model.Item?.GetRawValueString("Style", "dropdown");
string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? $"theme {Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower()} " : string.Empty;
var alignment = Model.Item?.GetRawValueString("Alignment", "left");
var buttonStyle = Model.Item?.GetRawValueString("ButtonStyle", "btn-primary");
var buttonSize = Model.Item?.GetRawValueString("ButtonSize", "btn-md");
var label = Model.Item?.GetString("Label", string.Empty);
switch (alignment)
{
case "left":
alignment = "align-items-start";
break;
case "center":
alignment = "align-items-center";
break;
case "right":
alignment = "align-items-end";
break;
}
string contentPadding = Model.Item.GetRawValueString("ContentPadding", "none");
switch (contentPadding)
{
case "none":
contentPadding = "p-0";
break;
case "small":
contentPadding = "p-3 p-md-3";
break;
case "large":
contentPadding = "p-5 p-md-5";
break;
}
}
<div class="d-flex flex-column @(theme)@(contentPadding) @(alignment)">
@if (GetSelectedLists().Any())
{
switch (style)
{
case "checkboxes":
<div>
@RenderHeader()
@foreach (var list in GetSelectedLists())
{
<div class="form-check form-check-inline">
<label class="form-check-label" for="list_@list.PageID">@list.GetString("Title")</label>
<input class="form-check-input" type="checkbox" id="list_@list.PageID" name="list" value="@list.PageID" @(!string.IsNullOrEmpty(query) && query.Contains($"{list.PageID}") ? "checked" : string.Empty) />
</div>
}
</div>
break;
case "checkboxbuttons":
<div class="d-flex flex-wrap gap-2">
@RenderHeader()
@foreach (var list in GetSelectedLists())
{
var active = string.Empty;
var selected = string.Empty;
var checkbox = string.Empty;
if (!string.IsNullOrEmpty(query) && query.Contains($"{list.PageID}"))
{
active = " active";
selected = "checked";
checkbox = GetCheckboxIcon();
}
<label class="btn @(buttonStyle) @(buttonSize)@(active)" for="list_@list.PageID"><span class="d-flex align-items-center gap-2">@list.GetString("Title") @(checkbox)</span></label>
<input class="visually-hidden" type="checkbox" id="list_@list.PageID" name="list" value="@list.PageID" @(selected) />
}
</div>
break;
case "dropdown":
@RenderHeader()
if (!string.IsNullOrEmpty(label))
{
<label>@label</label>
}
<select name="list" class="form-select">
<option value="" label="@Translate("All")"></option>
@foreach (var list in GetSelectedLists())
{
<option value="@list.PageID" label="@list.GetString("Title")" @(!string.IsNullOrEmpty(query) && query.Equals($"{list.PageID}") ? "selected" : string.Empty)></option>
}
</select>
break;
case "radiobuttons":
<div>
@RenderHeader()
<div class="form-check form-check-inline">
<label class="form-check-label" for="category_all">@Translate("All")</label>
<input class="form-check-input" type="radio" id="category_all" name="list" value="" checked>
</div>
@foreach (var list in GetSelectedLists())
{
<div class="form-check form-check-inline">
<label class="form-check-label" for="list_@list.PageID">@list.GetString("Title")</label>
<input class="form-check-input" type="radio" id="list_@list.PageID" name="list" value="@list.PageID" @(!string.IsNullOrEmpty(query) && query.Equals($"{list.PageID}") ? "checked" : string.Empty)>
</div>
}
</div>
break;
case "dropdownbutton":
@RenderHeader()
var facetTitle = !string.IsNullOrEmpty(query) && GetSelectedLists().Any() ? GetSelectedLists().FirstOrDefault(x => x.PageID.ToString() == query).GetString("Title") : Translate("All");
<div class="dropdown w-100">
<button class="btn @(buttonStyle) @(buttonSize) dropdown-toggle w-100" type="button" id="facet-dropdown-@(Model.ID)" data-bs-toggle="dropdown" aria-expanded="false">
@facetTitle
</button>
<div class="dropdown-menu w-100" aria-labelledby="facet-dropdown-@(Model.ID)">
<label class="dropdown-item" for="list_@(Model.ID)">@Translate("All")</label>
<input class="visually-hidden" id="list_@(Model.ID)" value name="list" type="radio">
@foreach (var list in GetSelectedLists())
{
var active = string.Empty;
var selected = string.Empty;
if (!string.IsNullOrEmpty(query) && query.Contains($"{list.PageID}"))
{
active = " active";
selected = "checked";
}
<label class="dropdown-item@(active)" for="list_@list.PageID">@list.GetString("Title")</label>
<input class="visually-hidden" type="radio" id="list_@list.PageID" name="list" value="@list.PageID" @(selected)>
}
</div>
</div>
break;
}
}
</div>