C# 单击“添加新记录”时不会触发剑道网格弹出窗口

C# 单击“添加新记录”时不会触发剑道网格弹出窗口,c#,jquery,asp.net-mvc,kendo-ui,kendo-grid,C#,Jquery,Asp.net Mvc,Kendo Ui,Kendo Grid,我正在使用带有弹出编辑器的剑道网格来显示数据库中的行。这些行来自“FemaleAdvice”表。每个FemaleAdvice对象都将属于FemaleContegory,因为FemaleContegory是一个查找表,当用户选择FemaleContegory时,将显示FemaleAdvice对象标题和描述的列表 在允许用户编辑FemaleAdvice对象所属的FemaleContegory时,显示类别的标题而不是数据库键是有意义的。我已经采取了几个步骤来实现这一点,但现在当我单击“添加新记录”时,

我正在使用带有弹出编辑器的剑道网格来显示数据库中的行。这些行来自“FemaleAdvice”表。每个FemaleAdvice对象都将属于FemaleContegory,因为FemaleContegory是一个查找表,当用户选择FemaleContegory时,将显示FemaleAdvice对象标题和描述的列表

在允许用户编辑FemaleAdvice对象所属的FemaleContegory时,显示类别的标题而不是数据库键是有意义的。我已经采取了几个步骤来实现这一点,但现在当我单击“添加新记录”时,控制台中出现了一个“Uncaught:ReferenceError:Category is not defined”错误。我觉得这很容易,但我对MVC/剑道有些陌生,所以我的无知正在显现。我的代码如下:

    //FemaleAdvice Model
    [Key]
    [ScaffoldColumn(false)]
    public Int64 FemaleAdviceKey { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }

    [Required]
    [UIHint("FemaleCategoryKey")]
    [DisplayName("Female Category")]
    public Int64 FemaleCategoryKey { get; set; }
    public virtual FemaleCategory Category { get; set; }


    [UIHint("Body")]
    public string Body { get; set; }

    [ScaffoldColumn(false)]
    public DateTime LastUpdated { get; set; }


    //*************FemaleAdvice View**************
    @(Html.Kendo().Grid<com.RomanceCoachOnTheGo.MVC.Models.FemaleAdvice>()
    .Name("FemaleAdvice")
    .ToolBar(toolbar =>
    {
       toolbar.Create();
     })
    .DataSource(dataSource => dataSource
            .Ajax()
            .Model(item => { item.Id(m => m.FemaleAdviceKey); })

            .Create(c => c.Action("CreateFemaleAdvice", "Administrator"))
            .Read(r => r.Action("ReadFemaleAdvice", "Administrator"))
            .Update(u => u.Action("UpdateFemaleAdvice", "Administrator"))
            .Destroy(d => d.Action("DeleteFemaleAdvice", "Administrator"))
        )
    .Columns(col =>
            {
                col.Bound(c => c.FemaleCategoryKey).ClientTemplate("#=Category.Title#");
                col.Bound(c => c.Title);
                col.Bound(c => c.Description);
                col.Bound(c => c.Body);
                col.Command(command => { command.Edit(); command.Destroy(); });
            })
    .Editable(editing => editing.Mode(GridEditMode.PopUp))
    .Sortable()
    .Pageable()

    .Filterable()
     )



     //***********Relevant Controller Action***************
     public ActionResult ReadFemaleAdvice([DataSourceRequest] DataSourceRequest request)
    {
        List<FemaleAdvice> advice = _db.FemaleAdvice.Include("Category").AllActive().ToList();

        return Json(advice.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
    }


    public ActionResult CreateFemaleAdvice([DataSourceRequest] DataSourceRequest request, FemaleAdvice advice)
    {
        if (ModelState.IsValid)
        {
            advice.IsActive = true;
            _db.FemaleAdvice.Add(advice);
            _db.SaveChanges();
        }

        return Json(new[] { advice }.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
    }
//FemaleAdvice模型
[关键]
[脚手架立柱(假)]
公共Int64 FemaleAdviceKey{get;set;}
公共字符串标题{get;set;}
公共字符串说明{get;set;}
[必需]
[UIHint(“女性分类”)]
[显示名称(“女性类别”)]
公共Int64 FemaleCategoryKey{get;set;}
公共虚拟FemaleCegory类别{get;set;}
[UIHint(“正文”)]
公共字符串体{get;set;}
[脚手架立柱(假)]
公共日期时间上次更新{get;set;}
//*************女性咨询意见**************
@(Html.Kendo().Grid())
.姓名(“女性咨询”)
.ToolBar(ToolBar=>
{
toolbar.Create();
})
.DataSource(DataSource=>DataSource
.Ajax()
.Model(item=>{item.Id(m=>m.FemaleAdviceKey);})
.Create(c=>c.Action(“CreateFemaleAdvice”、“管理员”))
.Read(r=>r.Action(“ReadFemaleAdvice”、“管理员”))
.Update(u=>u.Action(“UpdateFemaleAdvice”、“管理员”))
.Destroy(d=>d.Action(“DeleteFemaleAdvice”、“Administrator”))
)
.列(列=>
{
col.Bound(c=>c.FemaleCategoryKey).ClientTemplate(“#=Category.Title#”);
col.Bound(c=>c.Title);
col.Bound(c=>c.Description);
col.Body(c=>c.Body);
col.Command(Command=>{Command.Edit();Command.Destroy();});
})
.Editable(编辑=>editing.Mode(GridEditMode.PopUp))
.Sortable()
.Pageable()
.可过滤()
)
//***********相关控制员行动***************
公共操作结果ReadFemaleAdvice([DataSourceRequest]DataSourceRequest请求)
{
列表建议=_db.FemaleAdvice.Include(“Category”).AllActive().ToList();
返回Json(advice.ToDataSourceResult(request),JsonRequestBehavior.AllowGet);
}
公共操作结果CreateFemaleAdvice([DataSourceRequest]DataSourceRequest请求,FemaleAdvice通知)
{
if(ModelState.IsValid)
{
advice.IsActive=true;
_db.FemaleAdvice.Add(建议);
_db.SaveChanges();
}
返回Json(new[]{advice}.ToDataSourceResult(request),JsonRequestBehavior.AllowGet);
}

出现此问题是因为添加记录时,您的
类别
为空。因此剑道不知道如何渲染您在此处提供的模板:

col.Bound(c => c.FemaleCategoryKey).ClientTemplate("#=Category.Title#");
不幸的是,剑道模板语法不能很好地处理空值,因此您必须自己检查。将模板更改为类似以下内容:

#= Category != null ? Category.Title : '' #

这将打印出
Category.Title
(如果已设置),否则在设置之前它将是一个空字符串。

编辑现有记录时是否会出现相同的错误,还是仅在添加新记录时才会出现此错误?仅在添加新记录时才会出现此错误。编辑工作正常。噢,我刚刚意识到,编辑会在FemaleContegory表中创建一个重复的行。这只是在我将“.ClientTemplate”(“#=Category.Title”)和“.Include”(“Category”)添加到网格的列区域时开始的,为了让FemaleCatetoryKey显示为标题而不是键,我将开始研究这个问题!