Asp.net mvc 5 当我添加布局时,为什么Ignite UI分层网格抛出NullReferenceException?

Asp.net mvc 5 当我添加布局时,为什么Ignite UI分层网格抛出NullReferenceException?,asp.net-mvc-5,infragistics,ignite-ui,iggrid,Asp.net Mvc 5,Infragistics,Ignite Ui,Iggrid,每当我加载网格而不添加布局时,父网格就会加载得很好。但是,每当我添加布局时,将数据绑定到父级时都会引发NullReferenceException public ActionResult Index() { GridModel grid = GridLoadOnDemandModel(); grid.ID = "Services"; grid.LoadOnDemand = true; grid.DataSourceUrl =

每当我加载网格而不添加布局时,父网格就会加载得很好。但是,每当我添加布局时,将数据绑定到父级时都会引发NullReferenceException

public ActionResult Index()
    {
        GridModel grid = GridLoadOnDemandModel();
        grid.ID = "Services";
        grid.LoadOnDemand = true;
        grid.DataSourceUrl = this.Url.Action("BindParent");
        grid.ColumnLayouts[0].DataSourceUrl = this.Url.Action("BindChild");
        return View(grid);
    }

    private GridModel GridLoadOnDemandModel()
    {
        GridModel grid = new GridModel();
        grid.AutoGenerateLayouts = false;
        grid.AutoGenerateColumns = true;
        grid.PrimaryKey = "ID";
        grid.Width = "100%";
        grid.Columns.Add(new GridColumn() { HeaderText = "Service ID", Key = "ID", DataType = "number" });
        grid.Columns.Add(new GridColumn() { HeaderText = "Client ID", Key = "ClientID", DataType = "number" });
        grid.Columns.Add(new GridColumn() { HeaderText = "Package ID", Key = "PackageID", DataType = "number" });

        GridColumnLayoutModel layout = new GridColumnLayoutModel();
        layout.Key = "ServiceHistory";
        layout.ForeignKey = "ID";
        layout.PrimaryKey = "ID";
        layout.AutoGenerateColumns = false;
        layout.Columns.Add(new GridColumn() { HeaderText = "Log ID", Key = "LogID", DataType = "number", Hidden = true });
        layout.Columns.Add(new GridColumn() { HeaderText = "Service ID", Key = "ID", DataType = "number", Hidden = true});
        layout.Columns.Add(new GridColumn() { HeaderText = "Client ID", Key = "ClientID", DataType = "number" });
        layout.Columns.Add(new GridColumn() { HeaderText = "Package ID", Key = "PackageID", DataType = "number" });

        layout.Width = "100%";
        grid.ColumnLayouts.Add(layout);

        return grid;
    }
该错误在GetData方法的BindParent方法中抛出

    public JsonResult BindParent()
    {
        GridModel model = GridLoadOnDemandModel();
        model.DataSource = GetService().AsQueryable();
        return model.GetData();
    }

    public JsonResult BindChild(string path, string layout)
    {
        GridModel model = GridLoadOnDemandModel();
        model.DataSource = GetServiceLogs().AsQueryable();
        return model.GetData(path, layout);
    }

    private IEnumerable<Service> GetService()
    {
        var services = new List<Service>();

        for (int i = 0; i < 10; i++)
        {
            var service = new Service
            {
                ID = i,
                ClientID = 1,
                PackageID = 1
            };

            services.Add(service);
        }

        return services;
    }

    private IEnumerable<ServiceLog> GetServiceLogs()
    {
        var serviceLogs = new List<ServiceLog>();

        for (int i = 0; i < 10; i++)
        {
            var serviceLog = new ServiceLog
            {
                LogID = i,
                ID = 1,
                ClientID = i,
                PackageID = i
            };

            serviceLogs.Add(serviceLog);
        }

        return serviceLogs;
    } 
public class Service
{
    public int ID { get; set; }
    public int ClientID { get; set; }
    public int PackageID { get; set; }
}

public class ServiceLog
{
    public int LogID { get; set; }
    public int ID { get; set; }
    public int ClientID { get; set; }
    public int PackageID { get; set; }
}

public class Service
{
    public int ID { get; set; }
    public int ClientID { get; set; }
    public int PackageID { get; set; }
}

public class ServiceLog
{
    public int LogID { get; set; }
    public int ID { get; set; }
    public int ClientID { get; set; }
    public int PackageID { get; set; }
}
publicjsonresult BindParent()
{
GridModel模型=GridLoadOnDemandModel();
model.DataSource=GetService().AsQueryable();
返回model.GetData();
}
公共JsonResult BindChild(字符串路径、字符串布局)
{
GridModel模型=GridLoadOnDemandModel();
model.DataSource=GetServiceLogs().AsQueryable();
返回model.GetData(路径、布局);
}
私有IEnumerable GetService()
{
var services=新列表();
对于(int i=0;i<10;i++)
{
var服务=新服务
{
ID=i,
ClientID=1,
PackageID=1
};
服务。添加(服务);
}
返回服务;
}
私有IEnumerable GetServiceLogs()
{
var serviceLogs=新列表();
对于(int i=0;i<10;i++)
{
var serviceLog=新serviceLog
{
LogID=i,
ID=1,
ClientID=i,
PackageID=i
};
serviceLogs.Add(serviceLog);
}
返回服务日志;
} 
公务舱服务
{
公共int ID{get;set;}
public int ClientID{get;set;}
公共int-PackageID{get;set;}
}
公共类服务日志
{
public int LogID{get;set;}
公共int ID{get;set;}
public int ClientID{get;set;}
公共int-PackageID{get;set;}
}
公务舱服务
{
公共int ID{get;set;}
public int ClientID{get;set;}
公共int-PackageID{get;set;}
}
公共类服务日志
{
public int LogID{get;set;}
公共int ID{get;set;}
public int ClientID{get;set;}
公共int-PackageID{get;set;}
}
以下是堆栈跟踪:

位于Infragistics.Web.Mvc.GridModel.RenderHierarchicalQueryableRecursive(IQueryable可查询、WrappedGridGridResponse响应、GridModel baseLayout) 位于Infragistics.Web.Mvc.GridModel.RenderHierarchicalQueryable(IQueryable可查询) 在Infragistics.Web.Mvc.GridModel.DataBind()上 在Infragistics.Web.Mvc.GridModel.GetData()上 在c:\Users\kyle.wingate\Documents\Visual Studio 2013\Projects\IgniteUIHTMLEditorExample\IgniteUIHTMLEditorExample\Controllers\ServiceHistoryController.BindParent()中的IgniteUIHTMLEditorExample 在lambda_方法中(闭包、控制器基、对象[]) 位于System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object[]参数) 在System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext ControllerContext,IDictionary
2个参数)
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext ControllerContext、ActionDescriptor ActionDescriptor、IDictionary
2个参数) 在System.Web.Mvc.Async.AsyncControllerActionInvoker.ActionInvoke.InvokeSynchronousActionMethod()中 在System.Web.Mvc.Async.AsyncControllerActionInvoker.b_u39(IAsyncResult asyncResult,ActionInvokeInnerInvokeState) 位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult
2.CallEndDelegate(IAsyncResult asyncResult)
在System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResultBase上
在System.Web.Mvc.Async.asyncResultRapper.End[TResult](IAsyncResult asyncResult,对象标记)
位于System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
在System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d()中

在System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.c_uuDisplayClass46.b_u3f()

中,在
服务的类/模型中,您应该有一个以
GridColumnLayoutModel.Key
值命名的属性。以下是
服务
类的外观:

public class Service
{
    public int ID { get; set; }
    public int ClientID { get; set; }
    public int PackageID { get; set; }
    public IEnumerable<ServiceLog>  ServiceHistory { get; set; }
}
通过此更改,
GridModel.GetData
方法将通过
ServiceLog
类中的
ID
属性过滤数据

您可能需要更改
GetServiceLogs
方法来生成不同的
ID
,因为现在它将只返回
服务
的数据,ID=1

//… code omitted
layout.ForeignKey = "ID";
layout.PrimaryKey = "LogID";
// … code omitted