我是否需要定义架构?如果是这样,那应该是什么样的?我对此的搜索似乎只发现了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;
}
答案 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);
}
问候。