asp.net-mvc – 使用AJAX绑定时,在创建/更新后IEnumerable属性无法正确更新的Kendo Gri
|
我遇到的问题是,当我将模型的属性发送到我的控制器以获取来自Kendo Grid的更新或创建调用时,其属性未正确更新.该模型如下所示: public class ReleaseNotesModel
{
public int NoteID { get; set; }
public int ReleaseID { get; set; }
public List<TranslationModel> ReleaseNoteTranslations { get; set; }
public ReleaseNoteType ItemType { get; set; }
}
public class TranslationModel
{
public int TranslationID { get; set; }
public string Translation { get; set; }
public int LanguageID { get; set; }
public int ItemID { get; set; }
}
这是我视图中的网格: @(Html.Kendo().Grid<ReleaseNotesModel>()
.Name("Grid")
.Columns(columns =>
{
columns.Bound(m => m.ItemType).Width(140);
columns.Bound(m => m.Description);
columns.Command(command =>
{
command.Edit();
command.Destroy();
}).Width(170);
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable
.Mode(GridEditMode.PopUp)
.TemplateName("ReleaseNoteTemplate")
.Window(w => w.Width(620))
.DisplayDeleteConfirmation(true)
)
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
//.Server()
.Events(e => e.Error("grid_error"))
.Model(model =>
{
model.Id(m => m.NoteID);
model.Field(m => m.ReleaseID).DefaultValue(Model.ReleaseID);
model.Field(m => m.ItemType).DefaultValue(ReleaseNoteType.NewFeature);
//defaultTranslationsList is a List<TranslationModel> with two empty objects in it
model.Field(m => m.ReleaseNoteTranslations).DefaultValue(defaultTranslationsList);
})
.PageSize(5)
.Read(read => read.Action("GetNotes","ReleaseNotes",new { releaseID = Model.ReleaseID }))
.Create(create => create.Action("AddNote","ReleaseNotes"))
.Update(update => update.Action("EditNote","ReleaseNotes"))
.Destroy(destroy => destroy.Action("DeleteNote","ReleaseNotes"))
)
)
更具体地说,我遇到的问题是在我的控制器操作中: public async Task<ActionResult> EditNote(ReleaseNotesModel model) model.ReleaseNoteTranslations总是包含两个空对象(属性为null或0),即我为此属性设置的默认值.如果我没有设置默认值,那么我将不会在弹出编辑器中为此属性编辑任何字段.所有其他属性都按预期更新. 让我感到困惑的是,如果我使用服务器绑定而不是AJAX,那么所有数据都会被正确接收.所以我决定检查两种情况下发送的请求标头中的数据: // Using server binding ReleaseID:300 NoteID:886 ItemType:1 ReleaseNoteTranslations[0].ItemID:886 ReleaseNoteTranslations[0].LanguageID:1 ReleaseNoteTranslations[0].TranslationID:869 ReleaseNoteTranslations[0].Translation:The module is now released! ReleaseNoteTranslations[1].ItemID:886 ReleaseNoteTranslations[1].LanguageID:2 ReleaseNoteTranslations[1].TranslationID:870 ReleaseNoteTranslations[1].Translation:Le module est maintenant disponible! NoteID:886 // Using AJAX binding sort: group: filter: NoteID:886 ReleaseID:300 ReleaseNoteTranslations[0][TranslationID]:869 ReleaseNoteTranslations[0][Translation]:The module is now released! ReleaseNoteTranslations[0][LanguageID]:1 ReleaseNoteTranslations[0][ItemID]:886 ReleaseNoteTranslations[1][TranslationID]:870 ReleaseNoteTranslations[1][Translation]:Le module est maintenant disponible! ReleaseNoteTranslations[1][LanguageID]:2 ReleaseNoteTranslations[1][ItemID]:886 ItemType:1 现在我首先注意的是objectName [index]的语法.PropertyName vs objectName [index] [PropertyName] 我想知道这是否可能是我的问题的原因,如果是这样,有没有办法让我直接操纵发送的数据来修复它?这可能是Kendo Grid通过Ajax绑定发送数据的方式中的错误吗? 无论哪种方式,任何帮助将不胜感激! 解决方法因此,如果有人在将来发现这一点,我联系了Telerik支持,他向我解释说:
他们还为我提供了一个解决方法,使用请求数据函数来调用JavaScript函数,该函数将数据转换为正确的格式. 在视图中,通过指定要调用的JavaScript函数的名称来修改请求函数: .Create(create => create.Action("AddNote","ReleaseNotes").Data("serialize"))
然后添加将进行转换的函数: function serialize(data) {
for (var property in data) {
if ($.isArray(data[property])) {
serializeArray(property,data[property],data);
}
}
}
function serializeArray(prefix,array,result) {
for (var i = 0; i < array.length; i++) {
for (var property in array[i]) {
result[prefix + "[" + i + "]." + property] = array[i][property];
}
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC默认项目结构和脚本文件夹
- 在ASP.NET应用程序的global.asax中处理Application_Error
- asp.net-mvc-3 – 关于Razor中嵌套代码块声明的问题
- iis-7 – 经典ASP发送错误到浏览器不能在IIS7上进行远程连接
- asp.net-mvc-3 – 如何在MVC3自定义编辑器模板中获取属性名
- asp.net-mvc – 如何在ASP.NET MVC中实现分页?
- asp.net-mvc-2 – 为什么我们在ASP.NET MVC中使用HTML助手?
- asp.net – Visual C#中事件的下拉列表在哪里?
- 实体框架 – 带有实体框架的MVC 3和ASP.Net脚手架错误:没有
- ASP.Net MVC与ASP.Net表格
- asp.net-mvc-3 – MVC3 / Razor:cshtml.Execute
- asp.net-mvc – MicrosoftMvcValidation.js VS j
- asp.net – 如何在页面加载时以“添加新”模式进
- asp.net – 在网站上放置广告的最佳做法?
- asp.net-mvc – 返回ASP.Net Core MVC中的上一页
- asp.net-mvc – MVC 5 Bundle错误
- asp.net-mvc – 如何用asp.net mvc 3和ListBoxFo
- asp.net – 如何忽略正则表达式的情况?
- asp.net fileupload控件上传文件与多文件上传
- asp.net – 实体框架CTP5,代码优先.可选的导航属
