我在MVC工作,并使用Kendo作为我们的前端。我们有一个具有Enum值的模型。在我们的前端,我正在尝试生成一个Kendo网格,并能够从网格的下拉列表中修改Enum的值。
型号:
public class TankModel:FieldDeviceModel
{
//Other properties not shown
public TankLevel Level { get; set; }
}
控制器:
public class FieldSimulationController : Controller
{
public ActionResult Index()
{
return View();
}
//Other methods not shown
public ActionResult TanksTab()
{
return PartialView("Tanks");
}
}
查看:
@(Html.Kendo().Grid<TankModel>()
.Name("TanksGrid")
.Columns(maincolumns =>
{
maincolumns.ForeignKey(t => t.Level,
new SelectList(EnumHelper.GetSelectList(
typeof(TankLevel)))).EditorTemplateName("ClientLevel").Width(200);
})
.HtmlAttributes(new { style = "height: 550px; width:auto; text-align:center" })
.Sortable()
.Editable(editable => editable.Mode(GridEditMode.InCell))
.Pageable(pageable => pageable
.Refresh(true)
.PageSizes(true)
.ButtonCount(5))
.DataSource(dataSource => dataSource
.Ajax()
.Batch(true)
.Read(read => read
.Action("Devices_Read", "FieldSimulation") // Set the action method which will return the data in JSON format
.Data("GetTankType") // Specify the JavaScript function which will return the data
)
.Update(update => update.Action("Devices_Update", "FieldSimulation").Type(HttpVerbs.Post))
.PageSize(20)
.Model(model =>
{
model.Field(t => t.Level);
})
)
)
现在,我正在使用Kendo的ForeignKey列类型。这似乎没有给出任何错误,但网格没有显示下拉列表
我也尝试过来自其他地方的解决方案,例如here,结果与网格中没有列相同。
另外,我没有看到任何表明问题所在的JS错误。
感谢您的时间和任何帮助。
答案 0 :(得分:2)
我发现我有两个问题,很容易被忽视但很容易修复。
我的第一个问题是我的ForeignKey专栏:
maincolumns.ForeignKey(t => t.Level,
new SelectList(EnumHelper.GetSelectList(
typeof(TankLevel)))).EditorTemplateName("ClientLevel").Width(200);
首先,我不需要创建new SelectList
,因为EnumHelper已经返回了一个。我也从未指定网格应该用作显示/值的内容。因此,它从来没有填充过该列。为解决此问题,我使用了Value
返回的SelectList的Text
和EnumHelper
属性。
maincolumns.ForeignKey(t => t.Level,
EnumHelper.GetSelectList(
typeof(TankLevel)).ToList(),"Value","Text").Width(200);
我还发现我的项目缺少所有Kendo EditorTemplates,包括GridForeignKey模板。通过将其包含在我的项目中,我可以删除.EditorTemplateName("ClientLevel")
调用并使用默认编辑器模板