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

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

Mam listę rozwijaną Kendo, której nie mogę filtrować - patrząc na dane otrzymane w kontrolerze na następującą funkcję. Zauważam, że "tekst ciągu" jest zawsze pusty:

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

To jest kod dla 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))

To działało zanim dodałem część .Data ("getsite")) do metody read. Funkcja getsite () zwraca długo wywoływaną stronę (pomyślnie odebrana w kontrolerze).

Odpowiedzi:

0 dla odpowiedzi № 1

To, co często nie jest znane osobom korzystającym z MVC Builder, polega na tym, że biegły konstruktor umieszcza domyślną procedurę odczytu danych, aby wysłać tekst filtra do kontrolera.

jeśli nadpisujesz procedurę obsługi danych, musisz wysłać filtr tekstowy samodzielnie lub zadzwonić do metody, którą zwykle wywołuje, która jest następująca

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") + "")); }"
};
}

aby to zrobić, twoja funkcja getsite powinna wyglądać tak.

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
};
}

lub

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;
}