Asp.net mvc 带内联编辑组合框的剑道UI MVC网格&引用;“未定义”;即使使用模板空检查也会出错?

Asp.net mvc 带内联编辑组合框的剑道UI MVC网格&引用;“未定义”;即使使用模板空检查也会出错?,asp.net-mvc,kendo-ui,asp.net-mvc-5,kendo-grid,Asp.net Mvc,Kendo Ui,Asp.net Mvc 5,Kendo Grid,我正在使用Kendo MVC UI网格并成功地进行内联编辑,如下面的代码所示。我的问题是当我添加了一个组合框字段(作为编辑器模板)时 当我创建新行时,网格计算我的客户机模板(显示从属属性的“name”属性)。我已经为null添加了一个条件检查,但这似乎并不重要。删除客户端模板会使其正常工作 在条件中,我检查PointOfContact==null,但是当我通过内联编辑添加新记录时,我立即得到“PointOfContact未定义”,因此null检查实际上对我没有任何帮助 剃须刀视图: @(Html

我正在使用Kendo MVC UI网格并成功地进行内联编辑,如下面的代码所示。我的问题是当我添加了一个组合框字段(作为编辑器模板)时

当我创建新行时,网格计算我的客户机模板(显示从属属性的“name”属性)。我已经为null添加了一个条件检查,但这似乎并不重要。删除客户端模板会使其正常工作

在条件中,我检查PointOfContact==null,但是当我通过内联编辑添加新记录时,我立即得到“PointOfContact未定义”,因此null检查实际上对我没有任何帮助

剃须刀视图:

@(Html.Kendo().Grid<Blag.Models.Site>()
.Name("grid")
.Columns(columns =>
{
    //Name  MailingAddress  City    State   Zip     Country     POC     
    columns.Bound(p => p.Name).ClientTemplate("<a href='Sites/details/#=ID#'>#=Name#</a>");
    columns.Bound(p => p.MailingAddress);
    columns.Bound(p => p.City);
    columns.Bound(p => p.State);
    columns.Bound(p => p.Zip).Width("7em");
    columns.Bound(p => p.Country);
    columns.Bound(p => p.PointOfContactID).EditorTemplateName("POCDropDown").Title("POC").ClientTemplate(
    "# if (PointOfContact != null) { #" + //This seems to be screwing things up
    "#: PointOfContact.Name #"+   //note, no matter what I put here, this doesn't affect crash
    "# } else { #" +
    "  None " +
    "# } #");
    columns.Command(command =>
    {
        command.Edit();
    });
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Pageable()
.Sortable()
.Scrollable()
.HtmlAttributes(new { style = "height:90%;" })
.DataSource(dataSource => dataSource
    .Ajax()
    .PageSize(20)
    .Events(events => events.Error("error_handler"))
    .Model(model => model.Id(p => p.ID))
    .Create(update => update.Action("Grid_Create", "Sites"))
    .Read(read => read.Action("Grid_Read", "Sites").Type(HttpVerbs.Post))
    .Update(update => update.Action("Grid_Update", "Sites"))
    //   .Destroy(update => update.Action("EditingInline_Destroy", "Grid"))
    )
)

    <script type="text/javascript">
        function error_handler(e) {
            if (e.errors) {
                var message = "Errors:\n";
                $.each(e.errors, function (key, value) {
                    if ('errors' in value) {
                        $.each(value.errors, function() {
                            message += this + "\n";
                        });
                    }
                });
                alert(message);
            }
        }

    </script>
@(Html.Kendo().Grid())
.名称(“网格”)
.列(列=>
{
//姓名邮寄地址城市州邮编国家POC
columns.Bound(p=>p.Name).ClientTemplate(“”);
columns.Bound(p=>p.MailingAddress);
columns.Bound(p=>p.City);
columns.Bound(p=>p.State);
columns.Bound(p=>p.Zip).Width(“7em”);
columns.Bound(p=>p.Country);
columns.Bound(p=>p.PointOfContactID).EditorTemplateName(“POCDropDown”).Title(“POC”).ClientTemplate(
“#if(PointOfContact!=null){#”+//这似乎把事情搞砸了
“#:PointOfContact.Name#”+//注意,不管我在这里放什么,这都不会影响崩溃
“}否则{”+
“没有”+
"# } #");
columns.Command(Command=>
{
command.Edit();
});
})
.ToolBar(ToolBar=>ToolBar.Create())
.Editable(可编辑=>Editable.Mode(GridEditMode.InLine))
.Pageable()
.Sortable()
.Scrollable()
.HtmlAttributes(新的{style=“height:90%;”})
.DataSource(DataSource=>DataSource
.Ajax()
.页面大小(20)
.Events(Events=>Events.Error(“错误处理程序”))
.Model(Model=>Model.Id(p=>p.Id))
.Create(update=>update.Action(“网格创建”、“站点”))
.Read(Read=>Read.Action(“Grid_Read”,“Sites”).Type(HttpVerbs.Post))
.Update(Update=>Update.Action(“网格更新”、“站点”))
//.Destroy(update=>update.Action(“editingline\u Destroy”,“Grid”))
)
)
函数错误\u处理程序(e){
如果(如错误){
var message=“错误:\n”;
$。每个(例如错误、函数(键、值){
如果(值中的“错误”){
$.each(value.errors,function(){
消息+=此+“\n”;
});
}
});
警报(信息);
}
}
**Razor编辑器模板**

         @(Html.Kendo().ComboBox()
                .Name("PointOfContactID")
                .DataValueField("ID")
                .Filter("contains")
                .DataTextField("Name")
                .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("JSON", "POCS").Type(HttpVerbs.Post);
              })
              .ServerFiltering(true);
          })
          .HtmlAttributes(new { style = "width: 40em;" })
          .HeaderTemplate("<div class=\"combobox\">" +
                        "<span class=\"k-widget k-header\">Name</span>" +
                        "<span class=\"k-widget k-header\">Email</span>" +
                "<span class=\"k-widget k-header\">Phone</span>" +
                    "</div>")
  .Template("<div class='combobox'><span class=\"k-state-default\">#:data.Name#</span><span class=\"k-state-default\">#:data.Email#</span><span class=\"k-state-default\">#:data.Phone#</span></div>")
        )
@(Html.Kendo().ComboBox())
.名称(“接触点”)
.DataValueField(“ID”)
.过滤器(“包含”)
.DataTextField(“名称”)
.DataSource(source=>
{
source.Read(Read=>
{
read.Action(“JSON”、“POCS”).Type(HttpVerbs.Post);
})
.ServerFiltering(true);
})
.HtmlAttributes(新的{style=“width:40em;”})
.HeaderTemplate(“)+
“姓名”+
“电子邮件”+
“电话”+
"")
.Template(“#:data.Name#:data.Email#:data.Phone#”)
)

好吧,希望这对某人有用

出于某种原因,新记录会在这个特定的客户端模板上抛出一个错误,但是如果我检查另一个原语值,例如:

   columns.Bound(p => p.PointOfContactID).EditorTemplateName("POCDropDown").Title("POC").ClientTemplate(
    "# if(Name && PointOfContact) { #" +
    "#:PointOfContact.Name#"+
    "# } else { #" +
    "  None" +
    "# } #");
这很有效,没有明显的副作用。我认为这是因为我的JS没有直接用于PointOfContact的列,所以客户端对象对此一无所知


事实上,这样看很有道理

尝试在模型中为
PointOfContact
设置默认值

.Model({model => model.Id(p => p.ID); model.Field(d => d.PointOfContactID).DefaultValue(new PointOfContact()); }) 

是的,我并没有意识到我的客户端实现中并没有实例化接触点。