C# - ASP.NET ViewModel具有空引用但具有值

时间:2017-01-09 14:07:06

标签: c# razor asp.net-mvc-5

我在使用Razor渲染视图时遇到问题。我有一个有趣的警告:

  

App_Web_q1mgjijg.dll中发生了'System.NullReferenceException'类型的异常但未在用户代码中处理

     

附加信息:未将对象引用设置为对象的实例。

与不同的库App_Web_qpwhgwuw.dll,App_Web_index.cshtml.e59e9c51.8k5fyp3z.dll,App_Web_2unx2e1e.dll或App_Web_xf32dsyo.dll相同我真的不知道发生了什么。

我的控制员:

   public ActionResult Index(CandidatesAndPartyViewModel vm)
    {
        vm = new CandidatesAndPartyViewModel
        {
            Candidates = _repositoryCandidates.Candidates,
            PoliticalParties = _repositoryPoliticalParty.PoliticalParties,
            TypesOfElections = _repositoryTypeOfElection.TypeOfElections,

        };

        return View(vm);
    }

并重新正确填充模型。

我的观点:

   @foreach (var election in Model.TypesOfElections)
    {
        <div id="@election.Id">
            @foreach (var politicalParty in Model.PoliticalParties.OrderBy(x => x.NameOfPoliticalParty))
            {

                <div id="@politicalParty.NameOfPoliticalParty.Replace(" ", "-").Replace("'", "-")" class="section scrollspy">
                    <p class="nameOfParty">@politicalParty.NameOfPoliticalParty</p>
                    <div class="nameOfCandidats">

                        @foreach (var candidate in Model.Candidates.Where(x => x.PoliticalParty.Id == politicalParty.Id &&
                                x.TypeOfElections.NameOfElection == election.NameOfElection))
                            {
                            <p>
                               @candidate
                            </p>
                            }
                    </div>
                </div>
            }
        </div>
    }

错误行是:

 x => x.PoliticalParty.Id == politicalParty.Id &&
      x.TypeOfElections.NameOfElection == election.NameOfElection)

我尝试显示whitout该行和视图正常工作,但需要这一行:( 谢谢!

1 个答案:

答案 0 :(得分:0)

我最好的猜测是x.TypeOfElections为空。至于为什么,你的实体类的可见性不够。通常,如果您需要访问可能为null的属性的成员,则应首先进行空检查,这里最简单的方法是添加条件:

x.TypeOfElections != null && x.TypeOfElections.NameOfElection == election.NameOfElection

我可以猜测为什么这可能是空的,但是再次,如果没有你的实体类,它是不可能确定的。更有可能的是,您忽略了该属性上的virtual关键字。实体框架通过覆盖属性来自动加载相关实体,以添加其延迟加载逻辑。如果属性不是虚拟的,则它无法覆盖,因此无法加载关系。