【问题标题】:How to use dbcontext in Layout view (in .NET MVC, Entity framework) [closed]如何在布局视图中使用 dbcontext(在 .NET MVC、实体框架中)[关闭]
【发布时间】:2015-10-23 13:41:01
【问题描述】:

在我的 .NET(MVC,实体框架)应用程序中,我在数据库中有一些用户权限。例如属性“CanCreateNewContact”。我在页面菜单中也有“新联系人”按钮(在布局视图中)。如果用户没有必要的权限,我想知道如何隐藏此按钮。在经典视图中,我可以从数据库中读取控制器中的权限(通过 EntityFramework)。但是在 Layout 视图中怎么做呢?

【问题讨论】:

  • 如果是我,我会考虑创建一个导航模型。它根据用户拥有的权限填充链接等。模型中只存在用户可以访问的内容。然后,您的导航视图只是所述模型的呈现。

标签: .net entity-framework model-view-controller


【解决方案1】:

您可以从布局视图中检查 ViewBag 中的值,并使用过滤器根据您的数据库自动设置值(您不需要对每个操作都进行此查询)。

    public class UserRoleAttribute : FilterAttribute, IResultFilter
    {
        public void OnResultExecuted(ResultExecutedContext filterContext)
        {
        }
        public void OnResultExecuting(ResultExecutingContext filterContext)
        {
            //You can do your stuff and set a viewBad value
            var ctx = new UserDbContext();
            var canDoSomething = ctx.Permissions.Any(x => ...);
            filterContext.Controller.ViewBag.CanDoSomething = canDoSomething;
        }
    }

您的布局将如下所示:

@{
    var canDomeSomething =  ViewBag.CanDoSomething !=null && (bool) ViewBag.CanDoSomething;
}
@if (canDomeSomething)
{
    <button></button>
}
else
{
    <span>Not button</span>
}

你的控制器看起来像:

    [UserRole]
    public ActionResult Home()
    {
        return View();
    }

【讨论】:

  • 谢谢。我不知道我可以在布局视图中使用标准控制器中的 Viewbag。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2019-10-29
  • 1970-01-01
相关资源
最近更新 更多