详细信息中的以下代码。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对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>
}
现在这可以是一个起点