2017-09-12 6 views
2

syncfusionグリッドコントロールを使用してASP.Net MVCに階層グリッドを実装しています。 私は子グリッドの拡張でajax呼び出しでサーバー側からデータを取得しています。子グリッドを拡張しようとすると、ajax呼び出しがJSON形式のデータを取得し、JavaScriptエラー(TypeError:this.model.currentViewDataは未定義)が発生し、子グリッドのデータが子グリッドに読み込まれません。 質問の詳細と実行中のソースコードの例は、hereでも利用できます。TypeError:this.model.currentViewDataは定義されていません(階層グリッドから子グリッドのインプリメントで)

クラス

public class Data 
{ 
    public int OrderID { get; set; } 
    public int EmployeeID { get; set; } 
    public string ShipCountry { get; set; } 
    public List<ChildData> Employee { get; set; } 
} 
public class ChildData 
{ 
    public int EmployeeID { get; set; } 
    public string FirstNAme { get; set; } 
    public string LastNAme { get; set; } 
} 

コントローラ

public class GridController : Controller 
{ 
    // 
    // GET: /Grid/ 
    List<Data> obj = new List<Data>(); 


    public ActionResult GridFeatures() 
    { 

     var DataSource = GetData(); 
     ViewBag.datasource = DataSource.ToList(); 
     return View(); 
    } 
    public JsonResult GetChildData(int _empID) 
    { 
     var ChildDaqtaSource = ChildData(_empID); 
     return Json(ChildDaqtaSource, JsonRequestBehavior.AllowGet); 
    } 

    public static List<Data> GetData() 
    { 

     List<Data> obj = new List<Data>(); 
     //obj.Add(new Data() { OrderID = 1000, EmployeeID = 1, ShipCountry = "india", Employee = new List<ChildData>() { new ChildData() { EmployeeID = 1, FirstNAme = "Janet", LastNAme = "David" } } }); 
     //obj.Add(new Data() { OrderID = 1001, EmployeeID = 2, ShipCountry = "France", Employee = new List<ChildData>() { new ChildData() { EmployeeID = 2, FirstNAme = "Nancy", LastNAme = "John" } } }); 
     //obj.Add(new Data() { OrderID = 1002, EmployeeID = 3, ShipCountry = "US", Employee = new List<ChildData>() { new ChildData() { EmployeeID = 3, FirstNAme = "David", LastNAme = "Staven" } } }); 
     //obj.Add(new Data() { OrderID = 1003, EmployeeID = 4, ShipCountry = "US", Employee = new List<ChildData>() { new ChildData() { EmployeeID = 4, FirstNAme = "Janet", LastNAme = "David" } } }); 

     obj.Add(new Data() { OrderID = 1000, EmployeeID = 1, ShipCountry = "india" }); 
     obj.Add(new Data() { OrderID = 1001, EmployeeID = 2, ShipCountry = "France" }); 
     obj.Add(new Data() { OrderID = 1002, EmployeeID = 3, ShipCountry = "US" }); 
     obj.Add(new Data() { OrderID = 1003, EmployeeID = 4, ShipCountry = "US" }); 
     return obj; 

    } 
    public static List<ChildData> ChildData(int _EmpID) 
    { 
     List<ChildData> _childData = new List<ChildData>(); 
     _childData.Add(new ChildData { EmployeeID = 1, FirstNAme = "John", LastNAme = "Freeman" }); 
     _childData.Add(new ChildData { EmployeeID = 1, FirstNAme = "steve", LastNAme = "Alexander" }); 
     _childData.Add(new ChildData { EmployeeID = 1, FirstNAme = "Ali", LastNAme = "Naeem" }); 
     _childData.Add(new ChildData { EmployeeID = 1, FirstNAme = "Alex", LastNAme = "Wonder" }); 
     _childData.Add(new ChildData { EmployeeID = 1, FirstNAme = "Bill", LastNAme = "Gates" }); 
     _childData.Add(new ChildData { EmployeeID = 1, FirstNAme = "Alan", LastNAme = "Turing" }); 

     _childData.Add(new ChildData { EmployeeID = 2, FirstNAme = "Mark", LastNAme = "Anthoney" }); 
     _childData.Add(new ChildData { EmployeeID = 2, FirstNAme = "Carl", LastNAme = "Shoemaker" }); 
     _childData.Add(new ChildData { EmployeeID = 3, FirstNAme = "Carlos", LastNAme = "Anthony" }); 
     return _childData.Where(x => x.EmployeeID == _EmpID).ToList(); 
    } 
} 

カミソリビュー(GridFeatures.cshtml)

@model List<RemoteSaveAdaptorSample.Controllers.Data> 
<h2>Requisitions</h2> 
@(Html.EJ().Grid<RemoteSaveAdaptorSample.Controllers.Data>("EmployeeGrid") 
    .Datasource((List<RemoteSaveAdaptorSample.Controllers.Data>)ViewBag.DataSource) 
    //.Datasource(Model) 
    .AllowSorting(true) 
    .AllowResizing(true) 
    .AllowPaging(true) 
    .AllowGrouping(true) 
    .AllowTextWrap(true) 
    .AllowScrolling(true) 
    .AllowFiltering() 
    .EnableRowHover(true) 
    .Columns(col => 
    { 
     col.Field(x => x.EmployeeID).HeaderText("EmployeeID").Width(30).IsPrimaryKey(true).AllowResizing(false).Add(); 
     col.Field(x => x.OrderID).HeaderText("OrderID").Width(60).AllowFiltering(true).Add(); 
     col.Field(x => x.ShipCountry).HeaderText("Country").Width(100).Add(); 

    }) 
    .ChildGrid 
    //<RemoteSaveAdaptorSample.Controllers.ChildData> 
    (_childGrid => 
    { 
     _childGrid 
     .QueryString("EmployeeID") 
     .AllowPaging() 
     .Columns(_childCol => 
     { 
      _childCol.Field("EmployeeID").HeaderText("EmployeeID").Add(); 
      _childCol.Field("FirstNAme").HeaderText("First Name").Add(); 
     }) 
     .ClientSideEvents(x => x.Load("loadEvent")) 
     ; 
    }) 
) 
<script type="text/javascript"> 
    function loadEvent(args) { 
     var data = this.model.parentDetails.parentKeyFieldValue; 
     this.model.dataSource = ej.DataManager({ 
      url: "/grid/GetChildData?_empID=" + data + "" 
      , adaptor: "UrlAdaptor" 
     }); 
    } 
</script> 

すべてのヘルプは

ありがとうにappriciatedさ

答えて

0

私はクエリをチェックし、結果とカウントのペアとして渡すのではなく、サーバー側から結果だけを返したことがわかりました。 UrlAdaptorを使用する場合は、結果とカウントのペアとしてデータを返す必要があります。データをグリッドにバインドするようにします。 https://help.syncfusion.com/aspnetmvc/grid/data-adaptors#url-adaptor

public JsonResult GetChildData(int _empID) 
    { 
     var ChildDaqtaSource = ChildData(_empID); 
     var count = ChildDaqtaSource.Count; 
     return Json(new { result = ChildDaqtaSource, count = count }); 
    } 

がUrlAdaptor リンクのドキュメントのリンクを参照してくださいコード例を参照してください。

関連する問題