我有这个简单的模型:
public class ContactPersonDto
{
public int Id { get; set; }
public string ContactName { get; set; }
public PhoneDto ContactPhone { get; set; }
}
public class PhoneDto
{
public int Id { get; set; }
public string Number { get; set; }
}
我想使用内联编辑为ContactPersonDto创建一个网格。目前我的代码是:
@(Html.Kendo().Grid<ContactPersonDto>()
.Name("GridContactPersons")
.Columns(columns =>
{
columns.Bound(x => x.ContactName);
columns.Bound(x => x.ContactPhone).ClientTemplate("#= phoneTemplate(ContactPhone) #");
columns.Command(command =>
{
command.Edit();
command.Destroy();
}).Width(200);
})
.ToolBar(toolbar => toolbar.Create())
.DataSource(ds => ds
.Ajax()
.Read(read => read.Action("CustomerContactPersons_Read", "Customer"))
.Model(model =>
{
model.Id(x => x.Id);
model.Field(x => x.ContactPhone);
model.Field(x => x.ContactPhone.Id);
model.Field(x => x.ContactPhone.Number);
})
.Create("CreateCustomerContactPerson", "Customer")
.Update("UpdateCustomerContactPerson", "Customer")
.Destroy("DeleteCustomerContactPerson", "Customer")
)
)
其中phoneTemplate(ContactPhone)是简单的js函数,它接受电话号码和组号码。 我有PhoneDto的这个模板:
@model PhoneDto
@Html.HiddenFor(x => x.Id)
<div class="k-edit-label">@Html.LabelFor(m => m.Number)</div>
<div class="k-edit-field">
@Html.Kendo().MaskedTextBoxFor(x => x).Mask("(000) 000-0000").UnmaskOnPost(true)
</div>
除了添加新项目外,它运作良好。
当我按“添加新记录”时,我会收到:Uncaught ReferenceError: ContactPhone is not defined
按钮。我发现只有复杂属性才会出现问题,例如字符串ContactName一切顺利。
请在这件事上给予我帮助。
有没有办法在kendo网格中使用复杂的属性?
答案 0 :(得分:0)
我已经通过添加ContactPhone的默认值修复了它:
.DataSource(ds => ds
.Ajax()
.Read(read => read.Action("CustomerContactPersons_Read", "Customer"))
.Model(model =>
{
model.Id(x => x.Id);
model.Field(x => x.ContactPhone).DefaultValue(new PhoneDto { Type = PhoneType.Default });
})