When using RadzenDataFilter with a IEnumerable<int> filter value, .ToFilterString() and ToODataString() both return a blank string.
As soon as a regular string-based filter is added, it generates the values.
The below code should reproduce the issue.
@page "/dataFilterBug"
<RadzenButton Text="IEnumerable Only Filter" Click="EnumerableFilter" />
<RadzenButton Text="Text Only Filter" Click="TextFilter" />
<RadzenButton Text="Mixed Filter" Click="MixedFilter" />
<RadzenDataFilter @ref="dataFilter" TItem="Demo" ViewChanged="@(()=>StateHasChanged())" >
<Properties>
<RadzenDataFilterProperty Type="@typeof(string)" Property="@nameof(Demo.Title)" />
<RadzenDataFilterProperty
Type="@typeof(IEnumerable<int>)"
Property="@nameof(Demo.DemoValue)"
FilterOperator="FilterOperator.Contains"
FilterOperators="@(new [] { FilterOperator.Contains, FilterOperator.DoesNotContain})">
<FilterTemplate Context="field">
<RadzenDropDown @bind-Value="@(field.FilterValue)"
Style="width:100%;"
Data="@(new List<int> { 1, 2, 3, 4, 5 })"
AllowClear="true"
Multiple="true" />
</FilterTemplate>
</RadzenDataFilterProperty>
</Properties>
</RadzenDataFilter>
@if (dataFilter != null)
{
<p>Filter String: @dataFilter.ToFilterString()</p>
<p>OData String: @dataFilter.ToODataFilterString()</p>
}
@code {
RadzenDataFilter<Demo> dataFilter;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await base.OnAfterRenderAsync(firstRender);
if (firstRender)
{
await EnumerableFilter();
}
}
async Task EnumerableFilter()
{
await dataFilter.ClearFilters();
await dataFilter.AddFilter(new CompositeFilterDescriptor()
{
Property = nameof(Demo.DemoValue),
FilterValue = new int[] { 2 },
FilterOperator = FilterOperator.Contains
});
StateHasChanged();
}
async Task TextFilter()
{
await dataFilter.ClearFilters();
await dataFilter.AddFilter(new CompositeFilterDescriptor()
{
Property = nameof(Demo.Title),
FilterValue = "t",
FilterOperator = FilterOperator.Contains
});
StateHasChanged();
}
async Task MixedFilter()
{
await dataFilter.ClearFilters();
await dataFilter.AddFilter(new CompositeFilterDescriptor()
{
Property = nameof(Demo.DemoValue),
FilterValue = new int[] { 2 },
FilterOperator = FilterOperator.Contains
});
await dataFilter.AddFilter(new CompositeFilterDescriptor()
{
Property = nameof(Demo.Title),
FilterValue = "t",
FilterOperator = FilterOperator.Contains
});
StateHasChanged();
}
public class Demo
{
public string Title { get; set; }
public int DemoValue { get; set; }
}
}