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