用于kendo网格中复杂属性的内联编辑器

时间:2016-07-11 16:05:26

标签: javascript asp.net-mvc kendo-ui kendo-asp.net-mvc

我有这个简单的模型:

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>

这是我的网格: Grid

除了添加新项目外,它运作良好。 当我按“添加新记录”时,我会收到:Uncaught ReferenceError: ContactPhone is not defined按钮。我发现只有复杂属性才会出现问题,例如字符串ContactName一切顺利。 请在这件事上给予我帮助。 有没有办法在ken​​do网格中使用复杂的属性?

1 个答案:

答案 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 });
                })