0

在页面加载之前,我需要检查用户的安全级别。这将决定他们能够看到我们导航栏的哪些元素。我已经尝试了两种方法来运行这个 ajax 调用,都在$(document).ready函数内部。

div命名container包含ul在下面的 html 中)

$(document).ready(function ($) {
    //First attempt
    $('#container').load(
        $.ajax({
            type: 'GET',
            url: '@Url.Action("CheckSecurity","Home")'
        })
    );

    //Second attempt 
    window.onload = function () {
        $.ajax({
            type: 'GET',
            url: '@Url.Action("CheckSecurity","Home")'
        });
    };
});

因为这是一个 ASP MVC 3 站点,所以我在CheckSecurity方法中设置了一个断点。我可以说这两个电话都没有工作,因为它从未被解雇过。

控制器方法如下

public ActionResult CheckSecurity()
{
    ViewBag.UserName = Security.GetUserName(User);
    ViewBag.Admin = Security.IsAdmin(User);
    ViewBag.ITsupport = Security.IsItSupport(User);
    ViewBag.Read = Security.IsViewer(User);
    ViewBag.Modify = Security.IsModifier(User);
    return View();            
}

这应该是检查用户的安全级别,将boolean值放在ViewBag中,然后判断是否显示Admin Features下面的下拉项

<li class="dropdown">  
    <a href="#"  
       class="dropdown-toggle"  
       data-toggle="dropdown"
       data-hover="dropdown">  
        Admin  
        <b class="caret"></b>  
    </a>  
    <ul class="dropdown-menu">  
        <li>@Html.MenuLink("Products", "Index", "Product")</li>
        <li>@Html.MenuLink("Product Training", "Index", "Course")</li>
        <li>@Html.MenuLink("Continuing Ed", "Index", "ContEdCourse")</li>
        @if (ViewBag.Admin)
        {
            <li>@Html.MenuLink("Admin Features", "Index", "DropDownValues")</li>             
        }
    </ul>  
</li>

当页面尝试加载时,它会崩溃,并出现指向以下@if (ViewBag.Admin)行的错误:

Cannot convert null to 'bool' because it is a non-nullable value type

非常感谢任何帮助/建议。谢谢!

4

1 回答 1

0

/ ViewBags 只是在同一个 View 中工作。这意味着:

如果你在

public ActionResult Index()
{
    ViewBag.Index
}

然后你通过ajax执行

public ActionResult OtherAction()
{
    ViewBag.Other
}

ViewBag.Other在索引中不可见

public ActionResult Index()
{
    ViewBag.Index
    ViewBag.Other//erro other is null cuz because bellows to  OtherAction view
}

因此,您可以改为返回一个列表。

于 2013-05-13T16:19:32.827 回答