2

我目前正在使用一个 mvc 站点,其中有一个相当广泛的主布局页面。它依赖于数据库中的数据,而数据库中的数据又包括固有逻辑,例如布局中要包含的内容等。

我的大部分控制器操作都在此布局中呈现。我不确定如何工作。用于 Web 表单中的母版页面,所有逻辑都驻留在母版页中。我有几种机制来实现通用布局逻辑,但正在寻找实现这一目标的最佳实践方式。

选项是:

  • 在所有控制器操作中复制逻辑(不是真正的选择)
  • 将逻辑提取到另一个类并从控制器操作中调用它
  • 所有控制器都继承自基础控制器,该基础控制器覆盖 OnActionExecuting 方法,我们使用它来执行逻辑并在 TempData 中返回必要的数据
  • 在 cshtml 中使用“RenderAction”来调用必要的控制器操作并将布局提取到较小的局部视图中

还有其他对我开放的选择或建议吗?

4

1 回答 1

3

如果我理解正确,我会使用部分动作

@Html.Action("{ActionName}", "{Controller}", new { roleName= "Admin" })

动作部分调用类型的专用控制器动作方法

   [ChildActionOnly]
    public ActionResult _TopNav(string roleName)

通过这种方式,您可以设计将在整个应用程序中传播而无需复制的重复逻辑。

更好的是,如果您的 _Layout 处理基于权限的链接生成,您可以传递角色 ID 并控制最终用户看到的内容以及他们的导航按钮指向的内容。

于 2013-01-15T01:06:47.447 回答