J'ai implémenté la fonction combo kendo avec fonctionnalité en cascade dans mon application MVC 5. J'essaye d'implémenter le filtrage de serveur et ai frappé un bloc de route.Problème technique avec le filtre du serveur combo Kendo
La zone de liste déroulante affiche le numéro de client et le nom concaténé en tant que texte d'affichage. J'essaie d'implémenter le filtrage lorsque l'utilisateur tape quelques caractères. J'ai techniquement deux problèmes ici. Le premier est de savoir comment transmettre le texte du filtre au contrôleur. J'ai écrit une fonction javascript pour renvoyer le texte filtré, mais j'ai déjà défini l'attribut data sur une autre fonction appelée GetSalesOfficeFilter. Le deuxième problème que j'ai est que le filtre est sur le champ concaténé Name1 et Customer Number de mon modèle de vue alors que la requête linq que j'ai écrite n'a accès qu'au modèle qui ne contient pas le champ concaténé. Comment puis-je obtenir ce travail?
<div class="form-group">
@Html.LabelFor(model => model.Name1, htmlAttributes: new { @class = "control-label col-md-4" })
<div class="col-md-8">
<div class="editor-field">
@(Html.Kendo().ComboBoxFor(model => model.CustomerMasterDataId)
.HtmlAttributes(new { style = "width:100%" })
.DataTextField("CustomerNumberName")
.Placeholder("Select...")
.DataValueField("CustomerMasterDataId")
.Filter("contains")
.MinLength(3)
.DataSource(dataSource => dataSource
.Read(read =>
{
read.Action("RequestHeader_CustomerData", "Request")
.Type(HttpVerbs.Post)
.Data("GetSalesOfficeFilter");
}).ServerFiltering(true)
).CascadeFrom("CountryCode").Filter("contains")
.Events(e =>
{
e.Change("onCustomerComboChange");
})
)
</div>
@Html.ValidationMessageFor(model => model.Name1, "", new { @class = "text-danger" })
</div>
</div>
Contrôleur
public ActionResult RequestHeader_CustomerData(string id,string filter)
{
var response = requestRepository.GetCustomerData(id).AsQueryable().Where(i => i.Name1.Contains(filter)).ProjectTo<CustomerViewModel>();
var jsonResult = Json(response, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;
}
javascript
function GetSalesOfficeFilter() {
return { id: $('#CountryCode').val() }
};
function onAdditionalData() {
return {
filter: $("#Name1").data("kendoComboBox").text()
};
}