【问题标题】:Null Reference Error when directly assigning a List object to an PagedList将 List 对象直接分配给 PagedList 时出现空引用错误
【发布时间】:2015-01-22 17:59:00
【问题描述】:

KeyMaster 模型

        public class KeyMasterModel
        {   
            public int KeyId { get; set; }

            public int TypeId { get; set; }

            public string TypeName { get; set;}

        }

PagedKeyModel

        public class PagedKeyModel
        {
            // Collection of our KeyMasterModel , trying to populate this and send it to ViewModel to display a Grid//

            public IPagedList<Security.Models.KeyMasterModel> pagedkeymaster;
        }

//视图模型//

           public class KeyMasterViewModel
        {

//在这里告诉我如何在构造函数中初始化KeyMasterViewModel.pagedkeymodel.pagedkeymaster,这样我就不会得到null

            public PagedKeyModel pagedkeymodel;

            public KeyMasterModel keymastermodel;

        }

//控制器//

                 [HttpGet]
                public ActionResult ListOfKey(string sortOrder, string CurrentSort, int? page)
                {    

// View Model Object //

KeyMasterViewModel keyMasterViewModel = new KeyMasterViewModel();


    // At the gollowing step keyMasterModelObject has values retrieved from db //

//Next aim is to place it into ViewModel Object by assigning the retrieved PagedList of KeyMasterModel to IPagedList<Security.Models.KeyMasterModel> pagedkeymaster


  IPagedList<KeyMasterModel> KeyMasterModelObject= datalayercall.GetAll(sortOrder, CurrentSort, page);

    // Here is where error is thrown , all of a sudden I get the error , KeyMasterModelObject becomes null .

    // I am trying finally to populate everything into ViewModel object

          keyMasterViewModel .pagedkeymodel.pagedkeymaster = KeyMasterModelObject;

          return View(keyMasterViewModel);
        }

//业务逻辑层

         public IPagedList<KeyMasterModel> GetAll(string sortOrder, string CurrentSort, int? page)
                {

                    var retrieveddatalayerobject = datalayerobject.KeyMasters;

    // Retrieving Data from db and forming a list according to my model in App//

                    List<KeyMasterModel> keymastermodellist = new List<KeyMasterModel>();

                    KeyMasterModel keymastermodelobject=new KeyMasterModel();

                    foreach(var retrieveditems in retrieveddatalayerobject)
                    {
                        keymastermodelobject.KeyId = retrieveditems.KeyId;
                        keymastermodelobject.TypeName = retrieveditems.TypeMaster.TypeName;

// Create a New List Of KeyMasterModel //

                       keymastermodellist.Add(keymastermodelobject);
                    }

    // Paged List of KeyMaster Model //

                    IPagedList<KeyMasterModel> IPagedListKeyMasterModel = null; 

                    switch (sortOrder)
                    {

                        case "KeyId":
                            if (sortOrder.Equals(CurrentSort))

                                IPagedListKeyMasterModel = keymastermodellist.OrderByDescending
                                        (m => m.KeyId).ToPagedList(pageIndex, pageSize);

                    }

                    return IPagedListKeyMasterModel;

                }

【问题讨论】:

  • 请清理格式并尽量删除不相关的代码。您只能显示 1 或 2 个字段作为示例。

标签: asp.net-mvc linq nullreferenceexception asp.net-mvc-viewmodel pagedlist


【解决方案1】:

我理解的你的代码:

KeyMasterViewModel keyMasterViewModel = new KeyMasterViewModel();
[...]
keyMasterViewModel.pagedkeymodel.pagedkeymaster = KeyMasterModelObject;

所以在这里你使用keyMasterViewModel.pagedkeymodel 并假设它不为空(因为你试图分配给它的属性)。但是 KeyMasterViewModel 没有构造函数,也没有在声明时将 pagedkeymodel 设置为任何内容,因此它将默认为空。因此你的问题。

【讨论】:

  • 没错! , 你能帮我解决一下吗
  • 绕过任何空引用异常的方法是不引用空值。这意味着在访问之前将某些内容分配给为 null 的事物,或者如果该事物为 null,则不访问它。你做什么取决于你。
  • 在 PagedListModel 中定义了一个像 --> public pagedlist(){ IPagedList pagedkeymaster = null } 这样的构造函数,是否可以解决问题
  • 您没有我一眼就能看到的名为pagedlist 的类(将代码缩减到最小复制的另一个原因会有所帮助)。但是,无论您在哪里执行此操作,我都不确定将某些内容设置为 null 会有什么帮助。你的整个问题是一些东西是空的,你不希望它是。您需要的是 KeyMasterViewModel 中的构造函数,其中有问题的 null 是将 pagedkeymodel 设置为适当的值(可能只是 new PagedKeyModel ())。
  • public keyviewmodel(){ pagedlistmodel= new pagedlistmodel();} 还是没用
猜你喜欢
  • 2018-01-16
  • 2012-07-08
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多