这种逻辑的正确位置在哪里?

时间:2017-08-15 15:48:45

标签: asp.net-mvc model-view-controller

我正在自学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 })
}

在我看来,模型设计正在泄漏到视图中,但我看不到任何替代方案;必须显示或不显示删除链接,视图必须执行此操作。

应该怎样处理这类事情?

1 个答案:

答案 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