Asp.net mvc 考虑逻辑是一种不好的做法吗
我有一张桌子,上面的每一件物品都有一个状态,根据这个状态,你可以购买一件物品,也可以将它放在等待列表中 为此,我在Razor视图中有一个Asp.net mvc 考虑逻辑是一种不好的做法吗,asp.net-mvc,razor,asp.net-mvc-5,Asp.net Mvc,Razor,Asp.net Mvc 5,我有一张桌子,上面的每一件物品都有一个状态,根据这个状态,你可以购买一件物品,也可以将它放在等待列表中 为此,我在Razor视图中有一个@if语句,在该语句中,我检查状态,然后有条件地选择为适当的操作呈现哪个按钮 在会话和角色的其他视图中,我有一些类似的逻辑 这是一种好的做法吗?还有其他方法吗 @if( @item.status == 1 ) { <a class="btn btn-default" href="Items/Buy/@item.id">Buy</a&g
@if
语句,在该语句中,我检查状态,然后有条件地选择为适当的操作呈现哪个按钮
在会话和角色的其他视图中,我有一些类似的逻辑
这是一种好的做法吗?还有其他方法吗
@if( @item.status == 1 ) {
<a class="btn btn-default" href="Items/Buy/@item.id">Buy</a>
} else if ( item.status == 2 ) {
<a class="btn btn-default" href="Items/SetList/@item.id">Add To List</a>
}
@if(@item.status==1){
}否则如果(item.status==2){
}
这并不是世界上最糟糕的事情,因为它被用来在视图中显示元素。但是,我会为HtmlHelper创建一个扩展方法来呈现您试图创建的操作链接。比如:
public static class HtmlHelperExtensions
{
public static HtmlString RenderStatus(this HtmlHelper helper, ItemModel item)
{
if (item.status == 1)
{
return helper.ActionLink("Buy", "Buy", "Items", new { @class = "btn btn-default" });
}
if (item.status == 2)
{
return helper.ActionLink("Add To List", "SetList", "Items", new { id = item.Id }, new { @class = "btn btn-default" });
}
return new MvcHtmlString("");
}
}
那么在你看来,你所需要做的就是打电话
@Html.RenderStatus(item)
你做这件事的方式没有任何问题 当您听说或读到“在视图中包含逻辑是一种不好的做法”时,它通常指的是业务逻辑 没有任何东西可以阻止我们将模型传递到一个视图中,该视图上有各种可用的方法,然后可以从视图中的代码执行这些方法(但这是您应该避免的——而不是在控制器操作中完成) 您显示的逻辑实际上是呈现逻辑——您正在有条件地选择要包含在输出中的适当HTML。我认为没问题
如果这个逻辑在一个或多个视图中变得太麻烦,您可以使用HTML助手、PartialView和Razor中的函数来帮助解决这个问题。虽然我基本上同意您所做的是从技术上呈现逻辑,但确定是否可以购买或添加某些内容可以被视为业务逻辑 此外,除了依赖于该逻辑的按钮之外,您可能还有其他项目要显示或激活 我建议采取以下办法:
bool
属性,例如CanBuy
public bool CanBuy
{
get { return (status == 1); }
}
if
语句,如下所示:
@if(@item.CanBuy ) {
<a class="btn btn-default" href="Items/Buy/@item.id">Buy</a>
} else if ( item.CanAdd ) {
<a class="btn btn-default" href="Items/SetList/@item.id">Add To List</a>
}
@if(@item.CanBuy){
}如有其他情况,则(项目编号:CanAdd){
}
此外,Bobby Caldwell提出的在HtmlHelper中抽象这一点的建议很有价值,可以与此方法结合使用。如果使用更多的逻辑,可能会变得不好,你可以检查部分视图。逻辑是视图逻辑,所以在视图中很好哦,谢谢你,伙计,它看起来比在视图中拥有所有内容要好得多,我想它可以用在WebGrid中,因为我实际上使用的是手工制作的表格,没有分页和排序