我也注意到了很多,我投入我的看法字段是控制逻辑:MVC3模型数据分离
@if (Model.IsAdmin) {
<p>You're an admin</p>
}
我的MVC应该如何工作的理解是什么进入模型应该更像一个数据,它返回,如果它是一个窗体,它是供用户看到/更改等。
是否将控制逻辑放入视图不良实践?将控制逻辑传递给MVC中的视图的约定是什么?
我也注意到了很多,我投入我的看法字段是控制逻辑:MVC3模型数据分离
@if (Model.IsAdmin) {
<p>You're an admin</p>
}
我的MVC应该如何工作的理解是什么进入模型应该更像一个数据,它返回,如果它是一个窗体,它是供用户看到/更改等。
是否将控制逻辑放入视图不良实践?将控制逻辑传递给MVC中的视图的约定是什么?
是否把控制逻辑放在视图中不好的做法?
不,你可以非常好地在视图中查看逻辑来有条件地显示或隐藏某些部分。视图中的特定示例非常好。
如果你的视图中有很多控制逻辑,那么我的建议是处理控制器中的控制逻辑,然后针对不同的角色有不同的视图。
控制器逻辑
if(IsAdmin)
return View('AdminPage')
else
return View('UserPage')
的思想是保持你的意见只集中上显示给定给他们的数据,并让逻辑被分离成背景(控制器)。
但是,如果你只有在几个地方发生这种情况,那么它可能并没有那么糟糕。没有看到你的完整代码,我不能肯定地说,没有什么东西完全以黑色和白色分开。
即使差别很小?它似乎不是非常干燥的,遍布各地的意见,以保持逻辑的意见 – 2012-02-29 15:42:10
这正是我想要做的。如果差异很小,那么这并不坏(正如其他人所建议的那样)。但是,如果由于控制逻辑而导致一半视图发生变化,那么我会建议创建另一个视图。另外,如果只有内容在变化,那么也许你可以创建一个在控制器中更新的模型(如Stephen所建议的那样)。但是,如果它只是小件物品,那么你应该保持原样。这得到我的观点,答案不一定是黑色和白色 – 2012-02-29 15:49:53
这个特别的例子似乎没什么问题,你提出(在视图域)的数据(模型域),以及你所得到的是基于您接收到的数据。
典型的经验法则是,如果它比1-2条件@if
更复杂,则将其拆分为不同的,更专业化的视图(或使用专业化的局部视图),但实际上你真的永远不会看到没有MVC项目中的流量控制(甚至不仅仅是ASP.NET的实现)。
非常好的经验法则 - 我想我会采纳。 – 2012-02-29 15:51:46
如果需要,您可以将其添加到控制器。
if(user.IsAdmin)
ViewBag.WelcomeMessage = "You are an admin";
else
ViewBag.WelcomeMessage = "You are a user";
您应该使用角色进行授权而不是设置属性。像那样。事情是这样的:
@if(User.IsInRole("Admin")) {
<p>You're an Admin!</p>
}
如果你愿意,你可以封装此为Razor helper或创建一个HTML帮助,使这个清洁剂(如果你在很多地方使用它)
+1视图中的逻辑“有条件地显示或隐藏某些部分”是这里的要点。 – jgauffin 2012-02-29 15:44:22