Based on the total lack of response, I'm guessing very few other people ran into this issue and didn't see the obvious solution I finally came up with. Just in case some other poor soul is stuck like I was, here is what I came up with.
The transport object on the data source needs a function called parameterMap. In that, do something like the following:
parameterMap: function (data, type) {
if (type == "read") {
if (nameFilter) { // pull nameFilter from a viewmodel or wherever
data.filter = {
field: "tolower(Name)",
operator: "contains",
value: nameFilter.toLowerCase()
};
}
var newData = kendo.data.transports.odata.parameterMap(data);
delete newData.$format; // not currently supported by webapi.
return newData;
}
},
I did some simplifying for purposes of this answer, so apologies if that example is broken. I did my best to make it actually functional.