包含LINQ表达式MVC3

本文关键字:MVC3 表达式 LINQ 包含 | 更新日期: 2023-09-27 17:54:16

详细信息中的以下代码。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(我)。由于某些原因,Account总是NULL,尽管付款总是只有一个帐户,并且我们在LINQ表达式(PaymentController)中包含了Account:

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

我们不知道为什么Account是NULL。有关完整代码,请参见:

http://pastebin.com/Yf1JDsMF

包含LINQ表达式MVC3

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漏洞。

问题:您首先使用数据库,模型或代码的EF方案是什么?
在你的视图中,你可以使用<text> | </text>来代替Html。Raw(" | ");
你的链接生成策略又有点奇怪了。这些链接,我想,有相应的动作,所以必须有路由,你可以使用Html.ActionLink。
使用foreach(Model.Payments中的var m)进行迭代可以使您的代码更美观:

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

现在这可以是一个起点