我有一些剃须刀代码,例如:
foreach (var item in projectGroup) {
<tr>
...
<td>
<label id="@( "fieldapprovallabel" + @item.InvoiceLineId)">@item.FieldUserName</label>
@if(item.FieldApproved != null) {
<img src="../../Content/Images/stock_lock.gif" alt="locked" class="lockicon" />
}
</td>
...
}
所以基本上锁定图像仅根据条件可见。我知道在视图中有这样的逻辑是不好的。谁能提出更好的方法?
认为视图中的简单布尔逻辑或空检查有任何问题。
唯一的选择是将其全部隐藏在某个将返回 html(或空字符串)的帮助程序类中,我认为这在这样的简单情况下增加了不必要的复杂性。
您可以使用名为 IsLocked
的属性创建视图模型。这抽象了用于进行"IsLocked"确定的业务逻辑,并且不说明视图应如何行为,只是通知视图项目处于特定状态。
后续绑定代码类似,但不需要视图知道item.FieldApproved
等于锁定条件。
当然,在您的应用程序上下文中,item.FieldApproved
可能已经是关注点的干净分离,在这种情况下,我认为它很好。