繁体   English   中英

MVC3模型数据分离

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM