Всплывающее окно Kendo Grid не запускается при нажатии кнопки Добавить новую запись

#c# #jquery #asp.net-mvc #kendo-ui #kendo-grid

#c# #jquery #asp.net-mvc #kendo-ui #kendo-grid

Вопрос:

Я использую сетку Kendo с редактором всплывающих окон для отображения строк из базы данных. Строки взяты из таблицы «FemaleAdvice». Каждый объект FemaleAdvice будет принадлежать FemaleCategory в том смысле, что FemaleCategory является таблицей поиска, и когда пользователь выбирает FemaleCategory, будет показан список названий и описаний объектов FemaleAdvice.

Позволяя пользователю редактировать, к какой категории FemaleCategory относится объект FemaleAdvice, имело бы смысл отображать заголовок категории вместо ключа базы данных. Я предпринял пару шагов, чтобы сделать это, но прямо сейчас я получаю ошибку «Uncaught: 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);
    }
 

Комментарии:

1. Вы получаете ту же ошибку при редактировании существующей записи или это происходит только при добавлении новой записи?

2. Только когда я добавляю новую запись. Редактирование работает нормально.

3. Однако я только что понял, что редактирование создает дублирующуюся строку в таблице FemaleCategory.

4. Это начало происходить только тогда, когда я добавил «.ClientTemplate(«#= Категория. Заголовок #»);» в область столбцов сетки и «. Включить («Категория»)» в действие контроллера, чтобы заставить FemaleCatetoryKey отображаться в качестве заголовка вместо ключа.

Ответ №1:

Проблема возникает из-за того, что при добавлении записи ваше Category значение равно null. Итак, Kendo не знает, как отобразить шаблон, который вы дали здесь:

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

К сожалению, синтаксис шаблона Kendo плохо справляется с обработкой нулей, поэтому вам нужно проверить это самостоятельно. Измените шаблон на что-то вроде этого:

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

Это будет распечатано Category.Title , если оно установлено, в противном случае это будет пустая строка, пока она не будет установлена.

Комментарии:

1. Спасибо, я начну изучать это!