In einem Kendo-UI-Projekt habe ich wie im Handbuch beschrieben weitere Parameter in der View an die Datenquelle übergeben:
// ...
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action(@"Do_Read", @"Admin", new { filter = Model.Filter }))
In meinem Controller sah die entsprechende Funktion dann so aus:
public ActionResult Do_Read(
[DataSourceRequest] DataSourceRequest request,
string filter)
{
// ...
}
Beim Aufruf der Funktion war der filter
-Parameter komischerweise immer leer/null
, obwohl ein Wert in der View übergeben wurde.
Auch im Request["filter"]
stand der Wert korrekt drin.
Das war seltsam.
Ursache
Die Ursache war dann, dass „filter“ wohl ein von Kendo UI intern verwendeter Bezeichner war, der im Aufruf von Do_Read
auch irgendwie übergeben wurde.
Das ist irgendwie mit meinem Parameter kollidiert.
Lösung
Die Lösung bestand dann darin, den Parameter von „filter“ in „myFilter“ umzubenennen.
Anschließend wurde dann in der aufgerufenen Methode der Wert korrekt übergeben.
Also:
// ...
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action(@"Do_Read", @"Admin", new { myFilter = Model.Filter }))
und:
public ActionResult Do_Read(
[DataSourceRequest] DataSourceRequest request,
string myFilter)
{
// ...
}
Weitere Anmerkungen
Wenn der zusätzliche Parameter nicht nur ein string sondern ein komplexes Model ist, ist eventuell im ModelState
auch ein Fehler gesetzt.
Das trat zumindest in einem Update-Handler bei einem anderen Kendo-Projekt auf, in dem auch ein reservierter Bezeichner (in diesem Fall ein Name aus dem Model des Grids) verwendet wurde.
Zusammenfassung
Zusätzliche Parameter in Kendo-UI-Grid-Handler, egal ob Update
oder Read
oder ähnliches immer so eindeutig benennen, dass sie weder mit dem Namen einer Eigenschaft im verwendeten Model noch mit Kendo-internen Namen kollidieren.