[英]MVC3 Model Data Separation
我注意到,我在视图中添加的很多字段都是控制逻辑:
@if (Model.IsAdmin) {
<p>You're an admin</p>
}
我对MVC应该如何工作的理解是,模型中的内容应该更像是一个数据,如果它是一个表单则返回它,它是供用户查看/更改的,等等。
是否将控制逻辑置于不良实践中? 将控制逻辑传递给MVC中的视图的惯例是什么?
是否将控制逻辑置于不良实践中?
不,你可以完全没有视图中的视图逻辑来有条件地显示或隐藏某些部分。 你的特定例子在视图中完全没问题。
如果你的视图中有很多控制逻辑,那么我的建议是处理控制器中的控制逻辑,然后对不同的角色有不同的视图。
控制器逻辑
if(IsAdmin)
return View('AdminPage')
else
return View('UserPage')
我们的想法是让您的视图专注于显示给定的数据,并将逻辑分成背景(控制器)。
但是,如果你只在几个地方发生这种情况,那么它可能并不那么糟糕。 在没有看到完整代码的情况下,我无法肯定地说,因为没有任何东西在黑白中完全分开。
这个特殊的例子对我来说似乎很好,你呈现( 视图域)你的数据( 模型域),你得到的是基于你收到的数据。
典型的经验法则是,如果它比1-2条件更复杂@if
,将它拆分成不同的,更好的专业视图(或使用专门的局部视图),但实际上你永远不会真正看到没有流量控制的视图一个MVC项目(甚至不仅仅是ASP.NET的实现)。
如果需要,可以将其添加到控制器。
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助手中或创建一个Html助手以使其更清洁(如果您在许多地方使用它)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.