asp.net Kendo下拉列表产生类型错误:n.切片不是函数

xmjla07d  于 2023-02-14  发布在  .NET
关注(0)|答案(3)|浏览(93)

我需要定义schema吗?如果需要,应该是什么样子的?我搜索这个似乎只找到js解决方案,我正在寻找在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数据库查询:

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

mf98qq941#

像这样重写你的控制器方法:

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

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

ltqd579y

ltqd579y2#

你需要从json返回一个纯集合,看起来像这样

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

bt1cpqcv3#

如果你使用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);
}

相关问题