【问题标题】:Kendo Grid Popup not firing when Add New Record is clicked单击“添加新记录”时未触发 Kendo Grid 弹出窗口
【发布时间】:2014-06-27 21:44:08
【问题描述】:

我正在使用带有弹出编辑器的 Kendo Grid 来显示数据库中的行。这些行来自“FemaleAdvice”表。每个FemaleAdvice 对象都属于FemaleCategory,因为FemaleCategory 是一个查找表,当用户选择FemaleCategory 时,将显示FemaleAdvice 对象的Titles 和Descriptions 列表。

在让用户编辑一个FemaleAdvice 对象属于哪个FemaleCategory 时,显示类别的标题而不是数据库键是有意义的。我已经采取了几个步骤来执行此操作,但是现在当我单击“添加新记录”时,我在控制台中收到“未捕获:ReferenceError:未定义类别”错误。我觉得这很容易,但我对 MVC/Kendo 有点陌生,所以我的无知正在表现出来。我的代码如下:

    //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);
    }

【问题讨论】:

  • 您在编辑现有记录时是否会出现同样的错误,还是仅在添加新记录时才会出现这种情况?
  • 仅当我添加新记录时。编辑工作正常。
  • 哎呀,我才意识到,编辑会在 FemaleCategory 表中创建一个重复的行。
  • 当我添加 ".ClientTemplate("#=Category.Title#");" 时才开始发生这种情况到 Grid 的列区域和“.Include("Category")”到控制器操作,以使 FemaleCatetoryKey 显示为标题而不是键。

标签: c# jquery asp.net-mvc kendo-ui kendo-grid


【解决方案1】:

出现问题是因为当您添加记录时,您的 Category 为空。所以剑道不知道如何渲染你在这里给它的模板:

col.Bound(c => c.FemaleCategoryKey).ClientTemplate("#=Category.Title#");

不幸的是,Kendo 模板语法不能很好地处理空值,因此您必须自己检查。把模板改成这样:

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

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

【讨论】:

  • 谢谢,我会开始研究这个的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2019-09-07
  • 1970-01-01
相关资源
最近更新 更多