WebGrid.GetHtml()抛出对象引用未设置为对象的实例时

时间:2013-07-18 14:17:41

标签: asp.net-mvc sorting nullreferenceexception webgrid

描述

我无法让WebGrid排序工作。它在视图尝试加载时不断抛出NullReferenceException

环境

WebGrid 2.0.0.0,VisualStudio 2012,MVC 4.0版

详细

我的控制器操作不会尝试进行任何排序。我试图通过单击列标题来模拟排序,控制器的索引操作执行时没有任何错误。当视图尝试加载时,我收到运行时错误NullReferenceException was unhandled by user code

在调试模式下,我可以将错误追溯到WebGrid的GetHtml调用中的某些代码,这些代码试图引用Rows对象'grid2.Rows' threw an exception of type 'System.NullReferenceException'

我使用强类型集合伪造控制器中的一些数据,将其添加到模型中并将模型提供给视图。

我尝试了许多不同的变体,但这是我的代码的当前状态:

控制器操作

public class HomeController : Controller
    {

    public ActionResult Index(string sort, string sortdir)
    {
        LandingPageData myData = new LandingPageData();
        myData.UserName = "JoeBagodonuts";
        ReplacementReserveMvcDesign.ViewModels.ProjectCounts<ProjectCount> currentWork = new ProjectCounts<ProjectCount>();
        //Hacking up some data

        for (int i = 0; i < 1000; i++)
        {
            ProjectCount currentCount = new ProjectCount();
            currentCount.ProjectId = "PA-" + i.ToString();
            currentCount.DevelopmentName = "Development Name " + i.ToString();
            currentCount.OpenCount = i;
            currentCount.ActionRequiredCount = i;
            currentWork.Add(currentCount);
        }
        myData.UserProjectCounts = currentWork;

        return View(myData.UserProjectCounts);

    }

视图

@model IEnumerable<ProjectCount>
@using System.Web.Helpers
@using ReplacementReserveMvcDesign.ViewModels



@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
    WebGrid grid2 = new WebGrid(Model, canSort:true);
}

@grid2.GetHtml(
columns: grid2.Columns(
grid2.Column(columnName:"ProjectId", 
            header: "Project ID"), 
grid2.Column(columnName:"DevelopmentName", 
            header:"Development Name"),
grid2.Column(columnName:"OpenCount", 
            style: "text-align-center",
            header: "Open Requests"),
grid2.Column(columnName:"ActionRequiredCount", 
            header: "Action Required",
            style: "text-align-center")

))

这是堆栈跟踪:

[NullReferenceException: Object reference not set to an instance of an object.]
      lambda_method(Closure , ProjectCount ) +81
      System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count) +147
      System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count) +37
      System.Linq.<GetEnumerator>d__0.MoveNext() +330
      System.Linq.<SkipIterator>d__4d`1.MoveNext() +397
      System.Linq.<TakeIterator>d__3a`1.MoveNext() +375
      System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +535
      System.Linq.Enumerable.ToList(IEnumerable`1 source) +79
      System.Web.Helpers.WebGridDataSource.GetRows(SortInfo sortInfo, Int32 pageIndex) +166
      System.Web.Helpers.WebGrid.get_Rows() +118
      System.Web.Helpers.<>c__DisplayClass4.<Table>b__3(TextWriter __razor_helper_writer) +1191
      System.Web.WebPages.HelperResult.ToString() +102
      System.Web.WebPages.WebPageExecutingBase.WriteTo(TextWriter writer, Object content) +16
      ASP._Page_Views_Home_Index_cshtml.Execute() in c:\Users\is_rbm\documents\visual studio 2012      \projects\replacementreservemvcdesign\replacementreservemvcdesign\Views\Home\Index.cshtml:14
      System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +279
      System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +125
      System.Web.WebPages.StartPage.ExecutePageHierarchy() +142
      System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +180
      System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +377
      System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +32
      System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter,    ResultExecutingContext preContext, Func`1 continuation) +854204
      System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext    controllerContext, IList`1 filters, ActionResult actionResult) +265
      System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +838676
      System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +28
      System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
      System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +65
      System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
      System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +51
      System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42
      System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
      System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +51
      System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
      System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288

我渴望在这个项目中使用MVC,但我必须能够快速,轻松地构建可搜索,可排序和可分页的网格。

1 个答案:

答案 0 :(得分:0)

我更改了控制器的索引方法以返回ProjectCount对象的List而不是强类型的集合,现在一切正常。

这是控制器索引方法的新代码。

public ActionResult Index(string sort, string sortdir)
    {
        List<ProjectCount> items = new List<ProjectCount>();

        for (int i = 0; i < 1000000; i++)
        {
            ProjectCount currentCount = new ProjectCount();
            currentCount.ProjectId = "PA-" + i.ToString();
            currentCount.DevelopmentName = "Development Name " + i.ToString();
            currentCount.OpenCount = i;
            currentCount.ActionRequiredCount = i;
            items.Add(currentCount);
        }

        return View(items);

    }