2013-05-13 6 views
0

Перед загрузкой страницы мне нужно выполнить проверку на уровне безопасности пользователя. Это определит, какие элементы нашей навигационной панели они могут видеть. Я пробовал два метода при запуске этого вызова ajax, как внутри функции $(document).ready.Сделать вызов Ajax до загрузки страницы

(The 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")' 
     }); 
    }; 
}); 

Поскольку это 3-сайт ASP MVC, я установить точку останова в методе 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

Любая помощь/предложения были оценены. Спасибо!

+0

У вас есть элемент с контейнером id =? и имеет ли этот элемент событие нагрузки? (только сценарии изображений iframes и окно имеют события загрузки). вторая попытка должна была сработать. –

ответ

0

/ViewBags просто работают в одном и том же виде. Это означает следующее:

Если вы в

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 
} 

Итак, вам может вместо этого вернуть список.

+0

Итак, в основном, какой контроллер или метод вы работаете, это тот, который должен установить «ViewBag»? – NealR

+0

Мне все еще интересно, почему Аякс не уволен. Есть идеи по этому поводу? – NealR

+0

Я не вижу ни одного html, где у вас есть элемент с идентификатором 'container'. Вы уверены, что селектор '$ (# container)' выбирает любые элементы? –

Смежные вопросы