【发布时间】:2017-03-17 15:23:32
【问题描述】:
我在模型中有一个列表属性
public class MyModel
{
public MyModel()
{
ChildModels = new List<ChildModels>();
}
// other properties
public List<ChildModel> ChildModels {get; set;}
}
public class ChildModel
{
public int Id {get;set;}
public int Name {get;set;}
public int Value {get;set;}
}
在表单中提交生成的html标记是这样的
<div class="form-group">
<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="ChildModels_0__Id" name="ChildModels[0].Id" type="hidden" value="0">
<input id="ChildModels_0__Name" name="ChildModels[0].Name" type="hidden" value="value 1">
<div class="control-label col-md-3">
<label for="Value">value 1</label>
</div>
<div class="control-text col-md-7">
<input class="form-control" id="ChildModels_0__Value" name="ChildModels[0].Value" type="text" value="">
</div>
</div>
当表单被回发时,ChildModels 是null。其他属性有值。我什至在 Google Chrome 的“网络”选项卡的“请求标头”中都看不到 ChildModels。
谢谢!
编辑
这个问题是由 Kendo Grid 引起的。在编辑器模板中编辑记录时,它不会解析子对象。 为了解决这个问题,我必须编写一个解析子对象的 javascript 函数。像这样
function serialize(data) {
serializeArray("ChildModels", data["ChildModels"], data);
}
function serializeArray(prefix, array, result) {
var listattrs = $(".ValueAttributesClass"); // Add this class to one of the property of your child model
for (var i = 0; i < listattrs.length; i++) {
result[prefix + "[" + i + "].Id"] = $("#" + listattrs[i].id).val();
result[prefix + "[" + i + "].Name"] = $("#" + listattrs[i].id.replace("Id", "Name")).val();
result[prefix + "[" + i + "].Value"] = $("#" + listattrs[i].id.replace("Id", "Value")).val();
}
}
// In create event of kendo grid
.Create(update => update.Action("createactionmethod","controller").Data("serialize");
希望对有需要的人有所帮助。
谢谢!
【问题讨论】:
-
html 很好(我假设它在表单标签内)。向您展示 POST 方法。
-
我认为没有干预的是剑道网格。谢谢!
标签: asp.net-mvc list kendo-grid model-binding