Выпадающий список Kendo создает TypeError: n.slice не является функцией

Нужно ли определять схему? Если да, то как это должно выглядеть? Мои поиски для этого, похоже, только для включения js-решений, я ищу синтаксис, чтобы определить его в editortemplate.

Shared/editortemplate:

@(
Html.Kendo().DropDownList()
.Name("SearchFunction")
.DataTextField("SearchFunctionDesc")
.DataValueField("SearchFunctionCode")
.DataSource(source =>
    {        
        source.Read(read => { 
            read.Action("GetSearchFunctions", "User");
        });
    })
    .OptionLabel("--Select a Search Function--")
    .AutoBind(false)
)

В контроллере:

    public JsonResult GetSearchFunctions([DataSourceRequest] DataSourceRequest request)
    {
        var searchFuncs = AdminService.GetSearchFunctions();
        DataSourceResult result = searchFuncs.ToDataSourceResult(request);
        return Json(result, JsonRequestBehavior.AllowGet);
    }

И затем мой запрос dapper db:

            var result = new List<SearchFunction>();
            using (var conn = new OracleConnection(DatabaseConnectionString))
            {
                conn.Open();
                string query = "select FUNCTION_ID, SEARCH_FUNCTION_CD, " +        
                        "SEARCH_FUNCTION_DESC, IS_ACTIVE " +
                         "from TBL_SEARCH_FUNCTIONS "; 
                result = conn.Query(query)
                    .Select(s => new SearchFunction
                    {
                        FunctionId = (int)s.FUNCTION_ID,
                        SearchFunctionCode = s.SEARCH_FUNCTION_CD,
                        SearchFunctionDesc = s.SEARCH_FUNCTION_DESC,
                        Active = s.IS_ACTIVE
                    }).ToList<SearchFunction>();
                conn.Close();
                return result;
            }

Ответ 1

Перепишите свой метод контроллера следующим образом:

public JsonResult GetSearchFunctions()
{
    var searchFuncs = cmsViewAdminService.GetSearchFunctions();
    return Json(searchFuncs, JsonRequestBehavior.AllowGet);
}

Это должно упростить этот метод, поскольку вам не нужен DataSourceRequest (как @CSharper, упомянутый в комментарии). Kendo DropDownLists, в отличие от сеток, не требует класса DataSourceRequest. Таким образом, вы можете вызвать тот же JsonResult из jQuery Ajax, если вам нужно это сделать.

Ответ 2

Вам нужно вернуть чистую коллекцию из json, которая выглядит так:

{[
    {"Id":2,"Name":"some"},
    {"Id":3,"Name":"som2"}
]}

Ответ 3

Если вы используете ModelView и лямбда, вы также можете попробовать выполнить следующий код:

Предположим, у вас есть раскрывающийся список города, который извлекает данные из справочной таблицы (заполненной в CityViewModel):

public JsonResult GetCities()
{
    var dataContext = new EFDbContext();

    var cities = dataContext.Cities.Select(c => new CityViewModel
    {
        ID = c.ID,
        Name = c.Name
    });
    return Json(cities, JsonRequestBehavior.AllowGet);
}

С уважением.