剑道网格-插入具有外部列的新对象失败
Kendo Grid - inserting new object which has foreign columns fails
两天以来,我面临着一个严重的问题。我将我的剑道框架版本更新到了最新版本,从那以后,在剑道网格中插入新项目时出现了问题。这个问题以前从未存在过。
在我的网格中,我有一个"机架"对象列表。这个"机架"对象有两个外部列;"房间"answers"客户"
当我想插入一个新机架时,它失败了,因为控制器说"房间和客户信息不应该为空"。所以我的网格不再将外部列信息发送到我的控制器。
这是我的代码:
Rack.aspx
<%:
Html.Kendo().Grid<dc.Models.Configuration.Rack>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(r => r.EQU_NAME).Title("Name");
//columns.Bound(r => r.EQU_ROOM).Title("Room").ClientTemplate("#if(!data.EQU_ROOM){#''#}else{# #=data.EQU_ROOM.ROO_DATA_CENTER.DAT_NAME# - #=data.EQU_ROOM.ROO_NAME# #}#").EditorTemplateName("RoomEditor");
//columns.Bound(r => r.RAC_CUSTOMER).Title("Customer").ClientTemplate("#if(!data.RAC_CUSTOMER){#''#}else{# #=data.RAC_CUSTOMER.CUS_DATA_CENTER.DAT_NAME# - #=data.RAC_CUSTOMER.CUS_NAME# #}#").EditorTemplateName("CustomerEditor");
columns.Bound(r => r.EQU_PROVIDER).Title("Provider");
columns.ForeignKey(r => r.EQU_ROOM, (System.Collections.IEnumerable)ViewData["rooms"], "ROO_ID", "ROO_DATA_CENTER").ClientTemplate("#if(!data.EQU_ROOM){#''#}else{# #=data.EQU_ROOM.ROO_DATA_CENTER.DAT_NAME# - #=data.EQU_ROOM.ROO_NAME# #}#").EditorTemplateName("RoomEditor")
.Title("rooms").Width(150);
columns.ForeignKey(r => r.RAC_CUSTOMER, (System.Collections.IEnumerable)ViewData["customers"], "CUS_ID", "CUS_DATA_CENTER").ClientTemplate("#if(!data.RAC_CUSTOMER){#''#}else{# #=data.RAC_CUSTOMER.CUS_DATA_CENTER.DAT_NAME# - #=data.RAC_CUSTOMER.CUS_NAME# #}#").EditorTemplateName("CustomerEditor")
.Title("customer").Width(150);
columns.Bound(r => r.EQU_MODEL).Title("Model");
columns.Bound(r => r.EQU_REFERENCE).Title("Reference");
columns.Bound(r => r.EQU_INTERNAL_REFERENCE).Title("Immo ID");
columns.Bound(r => r.EQU_START_UP_DATE).Title("Start Date").EditorTemplateName("DateEditor").ClientTemplate("#=kendo.toString(data.EQU_START_UP_DATE, 'dd/MM/yyyy')#");
columns.Bound(r => r.RAC_WIDTH).Title("Width (cm)");
columns.Bound(r => r.RAC_DEPTH).Title("Depth (cm)");
columns.Bound(r => r.RAC_UNITS_NUMBER).Title("Units number");
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200);
})
.Resizable(resize => resize.Columns(true))
.Scrollable(scr=>scr.Height(int.Parse(ConfigurationManager.AppSettings["gridScrollableHeight"])))
.Sortable()
.ToolBar(toolbar => { toolbar.Create(); toolbar.Excel(); })
.Excel(excel => excel
.FileName("DAFYDAC - RACK List.xlsx")
.Filterable(true)
.ProxyURL(Url.Action("Excel_Export_Save", "Home")).AllPages(true)
)
.Pageable(pageable => pageable
.Refresh(true)
.ButtonCount(5))
.Editable(editable => editable.Mode(GridEditMode.InLine))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(int.Parse(ConfigurationManager.AppSettings["gridPageSize"]))
.Model(model => {
model.Id(r => r.EQU_ID);
model.Field(p => p.EQU_ROOM).Editable(true);
model.Field(p => p.RAC_CUSTOMER).Editable(true);
})
//.Events(events => events
//.RequestEnd("OnRequestEnd_Grid_Equipements")
//.Error("onError")
//)
.Read(read => read.Action("Racks_Read", "Configuration"))
.Create(create => create.Action("Racks_Create", "Configuration"))
.Update(update => update.Action("Racks_Update", "Configuration"))
.Destroy(destroy => destroy.Action("Racks_Destroy", "Configuration"))
)
.HtmlAttributes(new { style = ConfigurationManager.AppSettings["gridSize"] })
%>
房间编辑器.ascx
<%: Html.Kendo().DropDownList()
.Name("EQU_ROOM")
.DataValueField("ROO_ID")
.DataTextField("ROO_DATA_CENTER")
.OptionLabel("Select a room")
.Template("#if (!data.ROO_NAME) { #Select a room# } else{ # #=data.ROO_DATA_CENTER.DAT_NAME# - #=data.ROO_NAME# # } #")
.ValueTemplate("#if (!data.ROO_NAME) { #Select a room# } else{ # #=data.ROO_DATA_CENTER.DAT_NAME# - #=data.ROO_NAME# # } #")
.BindTo((System.Collections.IEnumerable)ViewData["rooms"])
.HtmlAttributes(new { data_value_primitive = true})
%>
ConfigurationController.cs
public ActionResult Racks_Create([DataSourceRequest] DataSourceRequest request, Rack rack)
{
ModelState.Remove("RAC_CUSTOMER.CUS_ROOM.ROO_SENSOR_TEMPO.SENSOR_START_UP_DATE");
ModelState.Remove("RAC_CUSTOMER.CUS_ROOM.ROO_SENSOR_HYGRO.SENSOR_START_UP_DATE");
ModelState.Remove("EQU_START_UP_DATE");
ModelState.Remove("EQU_ROOM.ROO_SENSOR_HYGRO.SENSOR_START_UP_DATE");
ModelState.Remove("EQU_ROOM.ROO_SENSOR_TEMPO.SENSOR_START_UP_DATE");
if (ModelState.IsValid)
{
try
{
RackRepository.Instance.Add(rack);
var results = new[] { rack };
return Json(results.ToDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);
}
catch (Exception e)
{
return this.Json(new DataSourceResult
{
Errors = "An error occured! " + e
});
}
}
else
{
return this.Json(new DataSourceResult
{
Errors = "An error occured! " + string.Join("; ", ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage))
});
//System.Diagnostics.Debug.WriteLine(string.Join("; ", ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage)));
//throw new Exception("Invalid model in Col_Create");
}
}
你知道为什么表单不向控制器发送外部列信息吗?
谢谢你的帮助。
您需要将列定义为外键:
@(Html.Kendo().Grid<Kendo.Mvc.Examples.Models.ProductViewModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.ProductName);
columns.ForeignKey(p => p.CategoryID, (System.Collections.IEnumerable)ViewData["categories"], "CategoryID", "CategoryName")
.Title("Category").Width(150);
columns.Bound(p => p.UnitPrice).Width(150);
columns.Command(command => command.Destroy()).Width(110);
})
相关文章:
- javascript处理一个对象数组以获得一个新的对象数组
- 返回带有筛选结果的新JSON对象
- 新Javascript对象的可选初始化属性
- Kinetic.js旋转组对象的新子对象具有不正确的偏移
- 嵌入多对多关系-如果一个新对象还不存在,则添加一个新的对象
- Jquery新元素在连接时导致[对象对象]
- 传递 JavaScript 函数以在新窗口对象中运行
- 单击新 DOM 对象时的操作
- 使用 JavaScript 比较 2 个数组并创建一个新的对象数组,该数组不包含与 id 字段匹配的对象
- 使用对象方法实例化新的对象 JavaScript
- 如何在使用 outerHTML 更改内容后获取对新 DOM 对象的引用
- 如何将两个 JS 数组连接到一个新的对象数组作为键:值
- 来自String的Javascript新Date对象,IE和FF上的不同结果
- 创建新日期对象时不一致
- 将对象的值推送到新的对象数组中
- 为 AJAX 数据添加新的对象值
- 无法使用新数据对象更新Knockout UI
- 通过比较和推送唯一对象来创建新的对象数组
- 如何在javascript中添加新的对象类型
- 我如何过滤对象并获得一个新的对象