2014-06-27 27 views
0

我使用帶彈出窗口編輯器的Kendo Grid來顯示數據庫中的行。這些行來自「FemaleAdvice」表。每個FemaleAdvice對象將屬於一個FemaleCategory,因爲FemaleCategory是一個查找表,並且當用戶選擇一個FemaleCategory時,將顯示一個FemaleAdvice對象標題和說明列表。單擊添加新記錄時,Kendo Grid Popup不會觸發

在讓用戶編輯一個FemaleAdvice對象屬於哪個FemaleCategory的情況下,顯示類別的標題而不是數據庫Key是有意義的。我已經採取了幾個步驟來做到這一點,但現在當我點擊「添加新記錄」時,控制檯中出現「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); 
    } 
+0

編輯exising記錄時是否出現同樣的錯誤,或者只有在添加新記錄時纔會出現這種錯誤? – jebar8

+0

僅當我添加新記錄時。編輯正常。 –

+0

Oosh,我剛剛意識到,編輯會在FemaleCategory表中創建一個重複的行。 –

回答

0

問題出現了,因爲當您添加記錄時,您的Category爲空。所以劍道不知道如何使你給它這裏的模板:

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

不幸的是劍道的模板語法並不做處理空值的好工作,所以你必須檢查自己。模板更改爲這樣的事情:

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

如果設置這將打印出Category.Title,否則,直到它被設置這將是一個空字符串。

+0

謝謝,我會開始研究這個! –

相關問題