2013-05-13 5 views
0

Avant le chargement de la page, je dois vérifier le niveau de sécurité de l'utilisateur. Cela déterminera quels éléments de notre barre de navigation ils peuvent voir. J'ai essayé deux méthodes à l'exécution de cet appel ajax, à la fois dans la fonction $(document).ready.Faire un appel Ajax avant chargement de la page

(le nom divcontainer Réunit les ul dans le code HTML ci-dessous)

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

Depuis c'est un site ASP MVC 3, j'ai mis un point d'arrêt dans la méthode CheckSecurity. Je peux dire qu'aucun appel ne fonctionne parce qu'il n'est jamais déclenché.

La méthode du contrôleur est ci-dessous

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

Ceci est censé vérifier le niveau de sécurité de l'utilisateur, placez la valeur boolean dans le ViewBag, puis déterminer si oui ou non pour afficher le Admin Features déroulant produit ci-dessous

<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> 

Lorsque la page tente de charger, il se bloque à la place avec cette erreur de pointage à la ligne @if (ViewBag.Admin):

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

Toute aide/suggestion grandement appréciée. THX!

+0

Avez-vous un élément avec un 'id =" container "'? et cet élément a-t-il même un événement de chargement? (seulement les scripts d'images iframes et la fenêtre ont des événements de chargement). la deuxième tentative aurait dû fonctionner bien. –

Répondre

0

/ViewBags fonctionnent simplement dans la même vue. Ce qui signifie ceci:

Si vous êtes

public ActionResult Index() 
{ 
    ViewBag.Index 
} 

puis vous exécutez par ajax

public ActionResult OtherAction() 
{ 
    ViewBag.Other 
} 

Le ViewBag.Other ne sera pas visible Index

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

Ainsi, vous pourrait renvoyer une liste à la place.

+0

Donc, en gros, quel que soit le contrôleur/la méthode dans laquelle vous travaillez est celui qui doit définir le 'ViewBag'? – NealR

+0

Je suis toujours curieux de savoir pourquoi l'Ajax ne se fait pas virer. Des idées là-dessus? – NealR

+0

Je ne vois aucun html où vous avez un élément avec l'ID de 'container'. Êtes-vous sûr que le sélecteur '$ (# container)' sélectionne des éléments? –

Questions connexes