Kendo下拉列表产生TypeError:n.slice不是函数

时间:2014-06-05 17:14:02

标签: asp.net asp.net-mvc c#-4.0 kendo-grid kendo-asp.net-mvc

我是否需要定义架构?如果是这样,那应该是什么样的?我对此的搜索似乎只发现了js解决方案,我正在寻找在editortemplate中定义它的语法。

共享/ 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;
            }

3 个答案:

答案 0 :(得分:26)

重写你的控制器方法:

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

这应该简化该方法,因为您不需要DataSourceRequest(如注释中提到的@CSharper)。与网格不同,Kendo DropDownLists不需要DataSourceRequest类。这样,如果需要,可以从jQuery Ajax方法调用相同的JsonResult。

答案 1 :(得分:4)

你需要从json返回一个看起来像那个

的纯集合
{[
    {"Id":2,"Name":"some"},
    {"Id":3,"Name":"som2"}
]}

答案 2 :(得分:1)

如果您使用ModelView和lambda,那么您也可以尝试使用以下代码:

假设您有一个城市下拉列表从参考表中检索数据(填充到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);
}

问候。