我正在自学MVC,并遇到了困难。我的数据库有一个Beers表和一个Breweries表。当然,有一个外键约束,以确保啤酒有啤酒厂。此约束是一种“无操作”约束,旨在防止在数据库中存在该啤酒厂的啤酒时删除啤酒厂。
我正在为Breweries实现Index页面,自动生成的代码列出了Breweries以及Edit,Details和Delete。到现在为止还挺好。如果尝试删除具有Beers的Brewery,则由于外键约束而导致删除失败。
但是,如果删除选项无法成功,最好保留删除选项。这导致视图中的代码如下: -
@Html.ActionLink("Edit", "Edit", new { id=item.BreweryID }) |
@Html.ActionLink("Details", "Details", new { id=item.BreweryID })
@if(item.Beers.Count == 0)
{
<text> |</text>
@Html.ActionLink("Delete", "Delete", new { id=item.BreweryID })
}
在我看来,模型设计正在泄漏到视图中,但我看不到任何替代方案;必须显示或不显示删除链接,视图必须执行此操作。
应该怎样处理这类事情?
答案 0 :(得分:4)
“泄漏”几乎没有问题。如果View需要某些数据,并且该数据在模型中可用,那么访问数据确实没有问题。这是非常普遍的事情。
但是,如果您不想访问视图中的<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="product">
<option value="1" data-price="100">Product 1</option>
<option value="2" data-price="200">Product 2</option>
<option value="3" data-price="300">Product 3</option>
</select>
<input type="text" id="price" value="" readonly>
<input type="number" id="quantity" min="1" max="9999999" step="1">
<input type="text" id="sum" readonly="">
集合,则可以向.Beers
ViewModel添加属性bool HasBeers
。然后,您可以在Controller中设置该属性并在View中使用它,这样View就不会访问超出您希望它访问的信息。
示例代码:
Brewery