【发布时间】:2013-05-13 16:12:41
【问题描述】:
在页面加载之前,我需要检查用户的安全级别。这将决定他们能够看到我们导航栏的哪些元素。我尝试了两种方法来运行这个 ajax 调用,都在 $(document).ready 函数中。
(名为container 的div 包含下面html 中的ul)
$(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
非常感谢任何帮助/建议。谢谢!
【问题讨论】:
-
你有一个带有
id="container"的元素吗?那个元素甚至有加载事件吗? (只有 iframe 图像脚本和窗口有加载事件)。不过第二次尝试应该会奏效。
标签: ajax asp.net-mvc asp.net-mvc-3 jquery