【问题标题】:NullReferenceException Include LINQ expression MVC3NullReferenceException 包含 LINQ 表达式 MVC3
【发布时间】:2011-04-29 09:43:40
【问题描述】:

Details.cshtml 页面中的以下代码:

 @{
            @Html.Raw(" | ");
            for (int i = 0; i < Model.Payments.Count; i++)
            {
                @Html.Raw("<a href=../../Payment/Details/" + Model.ID + "/" + Model.Payments.ElementAt(i).accountID + ">" + Model.Payments.ElementAt(i).Account.landIOC + "</a>");           
                @Html.Raw(" | ");
            }
        }

Model.Payments.ElementAt(i).Account 出于某种原因始终为 NULL,尽管付款始终只有一个帐户,并且我们在 LINQ 表达式 (PaymentController) 中包含 Account:

_erasDb.Payments.Include("Account").Include("Event").Where(...)

我们不知道为什么 Account 为 NULL。完整代码见:

http://pastebin.com/Yf1JDsMF

【问题讨论】:

  • 我们正在使用带有 Razor 视图引擎的 MVC3 对于我们的数据库访问,我们有一个带有 ADO.NET 自跟踪实体生成器的 .edmx。

标签: c# asp.net-mvc asp.net-mvc-3 linq


【解决方案1】:

多次调用ElementAt 效率很低。只需切换到foreach - 它应该修复ElementAt 返回null,更高效,更简单。

另外,为什么不只是:

<text> | </text>
foreach(var payment in Model.Payments)
{
    <a href=../../Payment/Details/@Model.ID/@payment.accountID">@payment.Account.landIOC</a>          
    <text> | </text>
}

如果您使用大量@Html.Raw(...),您可能错过了一个技巧……尤其是,如果您使用过多.Raw,您很有可能会打开 xss 漏洞。

【讨论】:

  • 您先生,是我们项目的救星:D ♥
  • 该死,我欢呼得太早了……它现在有一半的时间……很奇怪。
  • @Matthias - 有没有账户本身为空的情况?
  • 不,Payment 有一个 Account 的外键并且是必需的,所以一个 payment 总是只有 1 个账户。
  • 我们刚刚发现了问题...在我们的事件映射器中: var @event = _erasDb.Events .Include("BulletinDispatches") .Include("BulletinDispatches.Receiver") .Include(" BulletinDispatches.Receiver.Country") .Include("Participations") .Include("Sport") .Include("Payments") .Where(e => e.ID == eventId).FirstOrDefault(); .在参与之前,在不同的地方...
【解决方案2】:

问题:您首先使用的是数据库、模型还是代码的 EF 方案?
在您看来,您可以使用 &lt;text&gt; | &lt;/text&gt; 替换 Html.Raw(" | ");
同样,您的链接生成策略有点连贯。我想那些链接有相应的动作,所以必须有路线,你可以使用 Html.ActionLink。
并且使用 foreach(var m in Model.Payments) 进行迭代可以使您的代码更漂亮:

@{
 <text> |
  @foreach(var m in Model.Payments){
    <text>
    @Html.ActionLink(m.Account.landIOC,"Details","Account",new{Id = m.ID, AccountId= m.AccountID}) |
    </text>
  }
</text>
}

现在这可能是一个起点。

【讨论】:

  • 同样的问题。 NullReferenceException
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 2016-10-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多