.net - 如何在布局 View 中使用 dbcontext(在 .NET MVC、 Entity Framework 中)

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

在我的 .NET(MVC、 Entity Framework )应用程序中,我在数据库中拥有一些用户权限。例如属性“CanCreateNewContact”。我在页面菜单中也有“新联系人”按钮(在布局 View 中)。我想知道如果用户没有必要的权限如何隐藏此按钮。在经典 View 中,我可以从数据库(通过 EntityFramework)读取 Controller 中的权限。但是如何在布局 View 中做到这一点呢?

最佳答案

您可以从布局 View 中检查 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>
}

你的 Controller 看起来像:

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

关于.net - 如何在布局 View 中使用 dbcontext(在 .NET MVC、 Entity Framework 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31753579/

相关文章:

c# - 运行新的 google v3 api 应用程序时出错

entity-framework - 使用代码优先 EF CTP5 生成货币类型字段

php - 如何将子域合并到 MVC 框架中

php - 从数据库获取图片路径并显示在前端(Octobercms)

java - PRPC中的controller是怎么写的

c# - 在 C# 中查询消息内容的事件日志的最简单方法是什么?

c# - MSBuild:如何递归复制项目的某些父文件夹

c# - 在Win Form中通过Modal请求用户输入的最简单方法是什么

mysql - 不安装MySqlConnector是否可以编译?

c# - 使用从一个 Controller 到另一个 Controller 的 DbContext 变量