2012-02-29 127 views
3

我也注意到了很多,我投入我的看法字段是控制逻辑:MVC3模型数据分离

@if (Model.IsAdmin) { 
    <p>You're an admin</p> 
} 

我的MVC应该如何工作的理解是什么进入模型应该更像一个数据,它返回,如果它是一个窗体,它是供用户看到/更改等。

是否将控制逻辑放入视图不良实践?将控制逻辑传递给MVC中的视图的约定是什么?

回答

4

是否把控制逻辑放在视图中不好的做法?

不,你可以非常好地在视图中查看逻辑来有条件地显示或隐藏某些部分。视图中的特定示例非常好。

+1

+1视图中的逻辑“有条件地显示或隐藏某些部分”是这里的要点。 – jgauffin 2012-02-29 15:44:22

1

如果你的视图中有很多控制逻辑,那么我的建议是处理控制器中的控制逻辑,然后针对不同的角色有不同的视图。

控制器逻辑

if(IsAdmin) 
    return View('AdminPage') 
else 
    return View('UserPage') 

的思想是保持你的意见只集中上显示给定给他们的数据,并让逻辑被分离成背景(控制器)。

但是,如果你只有在几个地方发生这种情况,那么它可能并没有那么糟糕。没有看到你的完整代码,我不能肯定地说,没有什么东西完全以黑色和白色分开。

+0

即使差别很小?它似乎不是非常干燥的,遍布各地的意见,以保持逻辑的意见 – 2012-02-29 15:42:10

+0

这正是我想要做的。如果差异很小,那么这并不坏(正如其他人所建议的那样)。但是,如果由于控制逻辑而导致一半视图发生变化,那么我会建议创建另一个视图。另外,如果只有内容在变化,那么也许你可以创建一个在控制器中更新的模型(如Stephen所建议的那样)。但是,如果它只是小件物品,那么你应该保持原样。这得到我的观点,答案不一定是黑色和白色 – 2012-02-29 15:49:53

1

这个特别的例子似乎没什么问题,你提出(在视图域)的数据(模型域),以及你所得到的是基于您接收到的数据。

典型的经验法则是,如果它比1-2条件@if更复杂,则将其拆分为不同的,更专业化的视图(或使用专业化的局部视图),但实际上你真的永远不会看到没有MVC项目中的流量控制(甚至不仅仅是ASP.NET的实现)。

+0

非常好的经验法则 - 我想我会采纳。 – 2012-02-29 15:51:46

1

如果需要,您可以将其添加到控制器。

if(user.IsAdmin) 
    ViewBag.WelcomeMessage = "You are an admin"; 
else 
    ViewBag.WelcomeMessage = "You are a user"; 
0

您应该使用角色进行授权而不是设置属性。像那样。事情是这样的:

@if(User.IsInRole("Admin")) { 
    <p>You're an Admin!</p> 
} 

如果你愿意,你可以封装此为Razor helper或创建一个HTML帮助,使这个清洁剂(如果你在很多地方使用它)