Hello,
When values are already selected, the read filter no longer locates on page 1.
This only happens when values are selected, I get the impression that the read with filter remains on the same page as the read after ValueMapper.
EditorFor
@using Newtonsoft.Json;
@model IEnumerable<int>
@{
Layout = ViewBag.Layout ??
"_bootstrap.cshtml"
;
ViewData.TemplateInfo.HtmlFieldPrefix = ViewData.TemplateInfo.HtmlFieldPrefix.Replace(ViewData.ModelMetadata.PropertyName,
""
).Trim(
'.'
);
var
propertyName = ViewData[
"name"
] ==
null
? ViewData.ModelMetadata.PropertyName : ViewData[
"name"
].ToString();
var
editorHtmlAttributes = Html.GetUnobtrusiveValidationAttributes(propertyName, ViewData.ModelMetadata);
var
htmlAttributes = ViewBag.HtmlAttributes;
if
(htmlAttributes !=
null
)
{
if
(htmlAttributes is IDictionary<string, object>)
{
editorHtmlAttributes.Merge((IDictionary<string, object>)htmlAttributes);
}
else
{
editorHtmlAttributes.Merge(
new
RouteValueDictionary(htmlAttributes));
}
}
editorHtmlAttributes.Merge(
"class"
,
"form-control"
);
var
populationParams = JsonConvert.SerializeObject(ViewBag.PopulationParams);
}
@(Html.Kendo().MultiSelect()
.Name(propertyName)
.DataTextField(
"Text"
)
.DataValueField(
"Value"
)
.Filter(
"contains"
)
.Value(Model)
.HtmlAttributes(editorHtmlAttributes)
.DataSource(source =>
{
source.Custom()
.ServerFiltering(
true
)
.ServerPaging(
true
)
.PageSize(80)
.Type(
"aspnetmvc-ajax"
)
.Transport(transport =>
{
transport.Read(
"_To"
,
"Population"
,
new
{ area =
"Template"
, populationParams = populationParams });
})
.Schema(schema =>
{
schema.Data(
"Data"
)
.Total(
"Total"
);
});
})
.Virtual(v => v.ItemHeight(26).ValueMapper(
"valueMapper"
+ propertyName))
.Events(e =>
{
e.DataBound(
"onDataBound"
+ propertyName).Change(
"onDataBound"
+ propertyName);
})
)
<div id=
"count-@(propertyName)"
class=
"text-right"
>
</div>
<script>
var
cookieIds =
"templateemailable-@(propertyName)"
;
function
valueMapper@(propertyName)(options) {
$.cookie(cookieIds, JSON.stringify(options.value), { path:
'/'
});
$.ajax({
url:
"@Url.Action("
_ToValueMapper
", "
Population
", new { area = "
Template
", populationParams = populationParams })&cookieIds="
+ cookieIds,
type:
"GET"
,
success:
function
(data) {
options.success(data);
}
})
}
function
onDataBound@(propertyName)(e) {
$(
"#count-@(propertyName)"
).html(e.sender.value().length);
}
</script>
@Html.ValidationMessage(ViewData.ModelMetadata,
new
{ name = ViewData[
"name"
] })
@
if
(!string.IsNullOrEmpty(ViewData.ModelMetadata.Description))
{
<p class=
"help-block"
>@Html.Raw(ViewData.ModelMetadata.Description.Localize())</p>
}
Controler
public
virtual
ActionResult _To([DataSourceRequest] DataSourceRequest request,
string
populationParams)
{
var result = (
new
ToDataSource()).GetSelectListItems(
null
, populationParams);
return
Json(result.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
public
virtual
ActionResult _ToValueMapper(
string
populationParams,
string
cookieIds)
{
var values =
new
List<
string
>();
if
(Request.Cookies[cookieIds] !=
null
)
{
values = Server.UrlDecode(Request.Cookies[cookieIds].Value).JsonToObject<IEnumerable<
string
>>().ToList();
Request.Cookies[cookieIds].Expires = DateTime.Now.AddDays(-1);
}
var indices =
new
List<
int
>();
if
(values !=
null
&& values.Any())
{
var list = values.ToList();
var source = (
new
ToDataSource()).GetSelectListItems(
null
, populationParams);
var index = 0;
foreach
(var item
in
source)
{
if
(list.Contains(item.Value))
{
indices.Add(index);
list.Remove(item.Value);
if
(!list.Any())
return
Json(indices, JsonRequestBehavior.AllowGet);
}
index += 1;
}
}
return
Json(indices, JsonRequestBehavior.AllowGet);
}
Thank you for your help