Asp.net mvc 5 当我添加布局时,为什么Ignite UI分层网格抛出NullReferenceException?
每当我加载网格而不添加布局时,父网格就会加载得很好。但是,每当我添加布局时,将数据绑定到父级时都会引发NullReferenceExceptionAsp.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 =
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,IDictionary2个参数)
位于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.WrappedAsyncResult2.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