2014-01-13 90 views
1

我有一个可编辑的Kendo UI网格并带有自定义编辑器。每当我尝试单击自定义编辑器的文本框(这是当剑道是设置值到网格模型)之外,我得到一个JavaScript错误这样的:使用自定义编辑器绑定网格子模型

0x800a138f - JavaScript runtime error: Unable to set property 'PercentWeight' of undefined or null reference

在调试程序时,例外情况:

function anonymous(d,value) { 
    d.PercentInfo.PercentWeight=value 
} 

当我将鼠标悬停在d,它除了PercentInfo我所有的IngredientViewModel特性,当我将鼠标悬停在PercentInfo,它是undefined

这里是我的网格模型:

public class IngredientViewModel { 
    public string EncryptedIngredientId { get; set; } 
    public string CasNumber { get; set; } 
    public string IngredientName { get; set; } 

    [UIHint("PercentWeightEditor")] 
    public PercentInfoViewModel PercentInfo { get; set; } 
} 

这里是IngredientViewModel使用的PercentInfoViewModel型号:

public class PercentInfoViewModel { 
    public decimal? PercentWeight { get; set; } 
    public string PercentUnit { get; set; } 
} 

这里是电网部分的.cshtml:

@(Html.Kendo().Grid<IngredientViewModel>(Model) 
    .Name("IngredientsGrid") 
    .Editable(editable => editable.Mode(GridEditMode.InLine).Enabled(true)) 
    .BindTo(Model) 
    .DataSource(ds => ds 
     .Ajax() 
     .ServerOperation(false) 
     .Events(ev => ev.Error("onGridError")) 
     .Model(m => { 
       m.Id(p => p.EncryptedIngredientId); 
       m.Field(p => p.EncryptedIngredientId).Editable(false); 
       m.Field(p => p.PercentInfo); 
      }) 
     .Read("IngGrid_Read", "Company") 
     .Update("IngGrid_Update", "Company") 
     .Create("IngGrid_Create", "Company") 
     .Destroy("IngGrid_Destroy", "Company")) 
    .ToolBar(tbar => tbar.Create()) 
    .Columns(c => { 
       c.Bound(m => m.CasNumber); 
       c.Bound(m => m.IngredientName); 
       c.Bound(m => m.PercentInfo).ClientTemplate("#= PercentInfo.PercentWeight # #= PercentInfo.PercentUnit #"); 
       c.Command(command => { 
          command.Edit(); 
          command.Destroy(); 
         }).Width(200); 
      }) 
) 

这里是PercentWeightEditor .cshtml:

@model SupplierPortalWebsite.Models.PercentInfoViewModel 

@Html.TextBoxFor(m => m.PercentWeight) 
@Html.TextBoxFor(m => m.PercentUnit) 

我在做什么错?

回答

0

我不得不修改网格设置的Model调用将空模型作为默认值。下面是一块新的代码:

.Model(m => { 
      m.Id(p => p.EncryptedIngredientId); 
      m.Field(p => p.EncryptedIngredientId).Editable(false); 
      m.Field(p => p.PercentInfo) 
    /* I added this line --> */  .DefaultValue(new PercentInfoViewModel()); 
     }) 

这样,总有它的自定义编辑器可以分配,而不是试图分配给一个不存在的对象(这是什么原因造成的性能,空模型。例外)。