0

我有一个 MVC 4 / Entity web 项目落入我的腿上,我以前从未使用过。我正在经历它,但简单的事情真的让我感到困惑——比如根据数据库中的参数在我的布局中隐藏或显示链接。

我在我的 HomeController 中创建了一个函数,它只是在 ViewBag 中设置 2 个布尔值来判断一个人是经理还是超级用户。我使用该函数调用该函数

@Html.Action("SetupViewBag", "Home")

它就<body>在我的布局中的标签之后。这是 SetupViewBag 的代码:

public void SetupViewBag()
{
   ViewBag.IsManager = ADAccess.IsManager(SessionManager.GetUserName());
   ViewBag.IsSuper = SessionManager.SuperUser();
}

当我设置断点时,布尔值设置正确且顺序正确,但是当我尝试使用下面的代码访问它们时,我得到一个 'Cannot convert null to 'bool' 因为它是一个不可为空的值类型。 '

@{
   if((bool)@ViewBag.IsManager){                       
      <li>@Html.ActionLink("Management", "Management", "Home",null, new { id = "managementLink" })</li>
   }                     
}

必须有一些非常简单的东西我错过了。任何帮助是极大的赞赏。

4

2 回答 2

2

根据您的评论@Dakine83,您应该在控制器构造函数方法上设置 ViewBag,如​​下所示:

public class YourController : BaseController {
    public YourController(){

    }
}

这样做的原因是因为在调用您的操作方法时已经呈现了布局页面。你有一个 null 的原因ViewBag.IsManager

更新:使用基本控制器

public class BaseController : Controller {
    public BaseController() {
            ViewBag.IsManager = ADAccess.IsManager(SessionManager.GetUserName());
    }
}
于 2013-03-26T06:42:54.390 回答
1

我希望这对你有用,请尝试一次 @Html.ActionLink("Management", "Management", "Home", new { id = false }, null);

谢谢

于 2013-03-26T06:38:21.603 回答