/ / Kendo DropDownList FilterText toujours null - asp.net-mvc, kendo-asp.net-mvc, kendo-dropdown

Kendo DropDownList FilterText toujours null - asp.net-mvc, kendo-asp.net-mvc, kendo-dropdown

J'ai un Kendo DropdownList que je ne peux pas "filtrer - en regardant les données reçues dans le contrôleur à la fonction suivante, je remarque que le" texte en chaîne "est toujours nul:

    [OutputCache(NoStore = true, Duration = 0)]
public JsonResult GetAssemblys(string text, long site)
{
return Json(CreateFilteredList(text, site, (long)AssetTypeEnum.Assembly), JsonRequestBehavior.AllowGet);
}

Voici le code pour DropDownList:

 <div>@(Html.Kendo().DropDownList()
.Name("AssemblySelector")
.DataTextField("AssetName")
.DataValueField("AssetId")
.HtmlAttributes(new { style = "width: 570px;" })
.OptionLabel("Select assembly...")

.DataSource(s =>
{
s.Read(r => r.Action("GetAssemblys", "Form707B").Data("getsite"));
s.ServerFiltering(true);

})

.Filter(FilterType.Contains)
.Height(300)
.SelectedIndex(0))

Cela fonctionnait avant que j'ajoute la partie .Data ("getsite") à la méthode read. getsite () renvoie un site appelé depuis longtemps (celui-ci a été reçu avec succès dans le contrôleur).

Réponses:

0 pour la réponse № 1

Les utilisateurs de MVC Builder ignorent souvent que Fluent Builder utilise un gestionnaire de données en lecture par défaut pour envoyer le texte du filtre à leur contrôleur.

si vous remplacez le gestionnaire de données, vous devez envoyer le filtre de texte vous-même ou appeler la méthode généralement appelée, qui est la suivante

if (DataSource.ServerFiltering && !DataSource.Transport.Read.Data.HasValue() && DataSource.Type != DataSourceType.Custom) {
DataSource.Transport.Read.Data = new ClientHandlerDescriptor {
HandlerName = "function() { return kendo.ui.DropDownList.requestData(jQuery("" + EscapeRegex.Replace(Selector, @"\$1") + "")); }"
};
}

Pour ce faire, votre fonction de site Web devrait ressembler à ceci.

function getsite() {
// drop down element
var $dd = $("#AssemblySelector");
// widget
var dd = dd.data("kendoDropDownList");

var filterText = dd.input.text();

var site = null; // do your logic for this.
return {
site: site,
text: filterText
};
}

ou

function getsite() {
// drop down element
var $dd = $("#AssemblySelector");
// widget
var dd = dd.data("kendoDropDownList");

var ret = kendo.ui.DropDownList.requestData($dd);
ret["site"] = site;
return ret;
}