2012-03-28 5 views
0

Pourquoi ne pas ouvrir la boîte de dialogue "elete-dialog2" lors de l'exécution de la ligne en gras (entre **)Pourquoi ne pas ouvrir la boîte de dialogue

<script type="text/javascript"> 
    $(function() { 
     var deleteLinkObj; 
     // delete Link 
     $('.delete-link').click(function() { 
      deleteLinkObj = $(this); //for future use 
      $('#delete-dialog').dialog('open'); 
      return false; // prevents the default behaviour 
     }); 

     //definition of the delete dialog. 
     $('#delete-dialog').dialog({ 
      autoOpen: false, width: 350, resizable: false, modal: true, //Dialog options 
      buttons: { 
       "Confirm": function() { 
        $.post(deleteLinkObj[0].href, function (data) { //Post to action 
         if (data == '@Boolean.TrueString') { 
          deleteLinkObj.closest("tr").hide('slow'); //Hide Row 
          //(optional) Display Confirmation 
         } 
         else { 
          //this is the line 
          **$('#delete-dialog2').dialog('open');** 
         } 
        }); 
        $(this).dialog("close"); 
       }, 
       "Cancel": function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 
$('#delete-dialog2').dialog({ 
      autoOpen: false, width: 350, resizable: false, modal: true, //Dialog options 
      buttons: { 

       "Accept": function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 


    }); 
</script> 

La vue:

<h2>UNIVERSITIES</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
@Html.ValidationSummary(true) 
<table> 
    <tr> 
     <th> 
      Name 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.IdUniversidad }) | 
      @Html.ActionLink("Delete", "Delete", new { id = item.IdUniversidad }, new { @class = "delete-link" }) 
     </td> 
    </tr> 
} 

</table> 
<div id="delete-dialog" title="Information"> 
<p>Are you sure you want to delete this?</p> 
</div> 

<div id="delete-dialog2" title="Error"> 
<p>Ooops... Something failed</p> 
</div> 

Il affiche uniquement la boîte de dialogue avec les boutons Confirmer et Annuler, mais lorsque vous essayez d'afficher Cuandro, le dialogue avec le bouton Accepter n'est pas affiché

D'abord, s'il est ouvert ('# delete-dialog'), n'ouvrez pas le second dialogue (' # delete-dialog2 ') lorsque l'executi sur entrer à autre l'exécution entrer à autre dans cette partie if (data == '@Boolean.TrueString') { deleteLinkObj.closest("tr").hide('slow'); //Hide Row //(optional) Display Confirmation } else { **$('#delete-dialog2').dialog('open');** }

bénédictions

+0

Le rendu HTML est plus utile pour le débogage de ce qui semble être principalement un problème JavaScript; l'analyse de la vue asp.net pour voir ce que "serait" rendu est quelque chose que je préférerais éviter. Je ne pense pas que la majeure partie est conséquentielle (les divs de dialogue sont là et visibles) mais on ne sait jamais. –

+0

Assurez-vous que vous ajoutez vos js à la fin de la page, sinon ce qui se passe, c'est que js est plein avant que l'élément réel n'existe – SpYk3HH

+0

@ SpYk3HH Les fonctions JS sont enveloppées dans la fonction document.ready, donc la page devrait être rendu. Le contenu apporté par Ajax est une autre histoire, mais les exemples montrent une page rendue plutôt qu'une page demandée par Ajax. –

Répondre

1

Ce test rapide semble fonctionner correctement:

http://jsfiddle.net/bES2X/1/

Il y a deux choses différentes de la vôtre:

  1. Le balisage exact utilisé. J'ai un peu deviné un peu. Si je comprends correctement votre code ASP.NET, vous pouvez utiliser plusieurs ID pour vos lignes, ce qui est un balisage non valide.

  2. La fonction $ post (j'ai juste codé en dur un scénario qui échoue). Il semble que le href évaluera correctement SI ce que vous voulez est le HREF du premier lien de données. Alors, est-ce que le conditionnel pour @Boolean.TrueString fonctionne? Essayez de regarder cette expression ou console.log pour tester.

Questions connexes