jqGrid ASP.NET MVC2数据绑定NullReferenceException
我正在尝试JQGrid ASP.NET MVC2版本 创建模型和控制器:jqGrid ASP.NET MVC2数据绑定NullReferenceException,asp.net,asp.net-mvc-2,jqgrid-asp.net,Asp.net,Asp.net Mvc 2,Jqgrid Asp.net,我正在尝试JQGrid ASP.NET MVC2版本 创建模型和控制器: var itemsGridModel = new OrderItemsjqGridModel(); itemsGridModel.OrderItemsGrid.DataUrl = Url.Action("ItemsDataRequested", new {OrderID = OrderID, CustomerID = CustomerID }); orderVM.orderItemsGrid = i
var itemsGridModel = new OrderItemsjqGridModel();
itemsGridModel.OrderItemsGrid.DataUrl = Url.Action("ItemsDataRequested", new {OrderID = OrderID, CustomerID = CustomerID });
orderVM.orderItemsGrid = itemsGridModel;
return View(orderVM);
项目数据要求:
public JsonResult ItemsDataRequested(int OrderID, int CustomerID)
{
// Get both the grid Model and the data Model
var gridModel = new OrderItemsjqGridModel();
var orderItems = ordersRepository.GetOrder(OrderID).ItemsInOrders.ToList();
IQueryable<ItemsInOrder> myItems = orderItems.AsQueryable<ItemsInOrder>();
return gridModel.OrderItemsGrid.DataBind(myItems);
}
public JsonResult ItemsDataRequested(int-OrderID,int-CustomerID)
{
//获取网格模型和数据模型
var gridModel=new OrderItemsjqGridModel();
var orderItems=ordersepository.GetOrder(OrderID.ItemsInOrders.ToList();
IQueryable myItems=orderItems.AsQueryable();
返回gridModel.OrderItemsGrid.DataBind(myItems);
}
我在最后一行得到一个NullReferenceException。
myItems有1个项目,所有值都已填充
知道我做错了什么吗?
谢谢
堆栈跟踪:
at Trirand.Web.Mvc.Util.PrepareJsonResponse(JsonResponse response, JQGrid grid, DataTable dt)
at Trirand.Web.Mvc.Util.ConvertToJson(JsonResponse response, JQGrid grid, DataTable dt)
at Trirand.Web.Mvc.JQGrid.FilterDataSource(Object dataSource, NameValueCollection queryString, IQueryable& iqueryable)
at Trirand.Web.Mvc.JQGrid.GetJsonResponse()
at Trirand.Web.Mvc.JQGrid.DataBind()
at Trirand.Web.Mvc.JQGrid.DataBind(Object dataSource)
at TechRun.UI.Controllers.OrdersController.ItemsDataRequested(Int32 OrderID, Int32 CustomerID) in y:\work\yosi\source\Techrun\TechRun.UI\Controllers\OrdersController.cs:line 118
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
位于Trirand.Web.Mvc.Util.PrepareJsonResponse(JsonResponse响应、JQGrid网格、DataTable dt)
位于Trirand.Web.Mvc.Util.ConvertToJson(JsonResponse响应,JQGrid网格,DataTable dt)
位于Trirand.Web.Mvc.JQGrid.FilterDataSource(对象数据源、NameValueCollection查询字符串、iQueryTable和iQueryTable)
在Trirand.Web.Mvc.JQGrid.GetJsonResponse()上
在Trirand.Web.Mvc.JQGrid.DataBind()上
位于Trirand.Web.Mvc.JQGrid.DataBind(对象数据源)
在y:\work\yosi\source\TechRun\TechRun.UI\Controllers.OrdersController.ItemsDataRequested(Int32 OrderID,Int32 CustomerID)的y:\work\yosi\source\TechRun\TechRun.UI\Controllers\OrdersController.cs中:第118行
在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.ControllerActionInvoker.c_uudisplayClassD.b_uua()中
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter筛选器、ActionExecutingContext预文本、Func`1 continuation)
型号:
public class OrderItemsjqGridModel
{
public JQGrid OrderItemsGrid { get; set; }
public OrderItemsjqGridModel()
{
OrderItemsGrid = new JQGrid
{
Columns = new List<JQGridColumn>()
{
new JQGridColumn { DataField = "OrderID",
// always set PrimaryKey for Add,Edit,Delete operations
// if not set, the first column will be assumed as primary key
PrimaryKey = true,
Editable = false,
Width = 30 },
new JQGridColumn { DataField = "ItemID",
PrimaryKey = true,
Editable = true,
Width = 120},
new JQGridColumn { DataField = "ItemDescription",
Editable = true,
Width = 300},
new JQGridColumn { DataField = "NumOfItems",
Editable = true,
Width = 50
},
new JQGridColumn { DataField = "CostOfItem",
Editable = true,
Width = 75 },
new JQGridColumn { DataField = "TotalCost",
Editable = false
},
new JQGridColumn { DataField = "SuppolyDate",
Editable = true,
Width = 120,
DataFormatString = "{0:d}" },
},
Width = Unit.Pixel(640),
Height = Unit.Percentage(100)
};
OrderItemsGrid.ToolBarSettings.ShowRefreshButton = true;
OrderItemsGrid.ToolBarSettings.ShowAddButton = true;
OrderItemsGrid.ToolBarSettings.ShowDeleteButton = true;
OrderItemsGrid.ToolBarSettings.ShowEditButton = true;
}
}
公共类OrderItemsjqGridModel
{
公共JQGrid OrderItemsGrid{get;set;}
public OrderItemsjqGridModel()
{
OrderItemsGrid=新JQGrid
{
列=新列表()
{
新的JQGridColumn{DataField=“OrderID”,
//始终为添加、编辑、删除操作设置PrimaryKey
//如果未设置,则第一列将假定为主键
PrimaryKey=true,
可编辑=假,
宽度=30},
新的JQGridColumn{DataField=“ItemID”,
PrimaryKey=true,
可编辑=真,
宽度=120},
新的JQGridColumn{DataField=“itemsdescription”,
可编辑=真,
宽度=300},
新的JQGridColumn{DataField=“NumOfItems”,
可编辑=真,
宽度=50
},
新的JQGridColumn{DataField=“CostOfItem”,
可编辑=真,
宽度=75},
新的JQGridColumn{DataField=“TotalCost”,
可编辑=假
},
新的JQGridColumn{DataField=“SuppolyDate”,
可编辑=真,
宽度=120,
DataFormatString=“{0:d}”},
},
宽度=单位像素(640),
高度=单位百分比(100)
};
OrderItemsGrid.ToolBarSettings.ShowRefreshButton=true;
OrderItemsGrid.ToolBarSettings.ShowAddButton=true;
OrderItemsGrid.ToolBarSettings.ShowDeleteButton=true;
OrderItemsGrid.ToolBarSettings.ShowEditButton=true;
}
}
我知道这是一个老问题,但我一直在为同一问题寻找解决方案,但运气不好,我已经返回到我的代码进行更多异常分析,我找到了解决方案,我更愿意将其记录在这里,以便任何有相同问题的人都会满意
我发现了原因,模型列名称和返回的SQL查询字段不同,其中一个模型列中存在拼写错误
确保所有JGrid列的名称都与SQL查询列的名称相同。我也遇到了同样的情况,运气好吗?嗨,Shadi,这确实是一个老问题,我已经没有来源了,所以我相信你的话。。。我会将此标记为答案,如果有人会在此处发布其他内容,请重新评估:-)