2011-01-10 55 views
1

我正在尝试JQGrid ASP.NET MVC2版本。jqGrid ASP.NET MVC2 DataBind NullReferenceException

创建的模型和控制器:

var itemsGridModel = new OrderItemsjqGridModel(); 
    itemsGridModel.OrderItemsGrid.DataUrl = Url.Action("ItemsDataRequested", new {OrderID = OrderID, CustomerID = CustomerID }); 
    orderVM.orderItemsGrid = itemsGridModel; 


    return View(orderVM); 

的ItemsDataRequested:

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); 
} 

我得到最后一行一个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) 

型号:

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; 
} 

} 
+0

同样的事情发生在我身上,运气好吗? – IronicMuffin 2011-07-19 18:51:45

回答

7

我知道这是一个老问题,但我一直在寻找的,没有运气同样的问题的解决方案,我返回到我的代码进行了更多的异常分析,并且我找到了解决方案,我最好在这里记录它,这样任何人都会遇到同样的问题。

我发现原因,模型JGridColumn名称是不同于返回的SQL查询字段,其中一个模型列有拼写错误。

确保所有JGrid列的名称都与SQL查询列的名称相同。

+0

嗨沙迪,这确实是一个老问题,我再也没有消息来源了,所以我接受你的话......我会把这个标记为答案,如果有人会在这里发帖,评估 :-) – Dani 2012-03-10 10:22:28