2010-10-21 3 views
1

Utilisation de formulaires Web ASP.NET avec UpdatePanel et utilisation des boîtes de dialogue jQueryUI avec à l'intérieur. D'abord, mon code ressemblait à this simple dialog demo avec un effet show: 'blind', mais j'ai eu le problème que jQuery déplace la boîte de dialogue en dehors du formulaire, empêchant les contrôles ASPNET de publier sur le serveur. Donc, je this excellent blog solution, à savoir en ajoutant ceci à init dialogue:jQuery Dialog, UpdatePanel, RegisterStartupScript, avec Afficher: bug 'aveugle'?

open: function (type, data) { 
    $(this).parent().appendTo("form"); 
}, 

Cependant, cela semble provoquer un bug dans lequel les charges de dialogue dans le coin de la page avant d'être positionné, as you can see (hit « run "sur cette page pour voir le dialogue de rechargement). Je peux résoudre ce problème en supprimant l'effet aveugle de la boîte de dialogue:

show: 'blind', 

Supprimer l'effet aveugle supprime cette apparaissent-in-the-coin problème, as you can see here. Cependant, j'aime mon effet aveugle. Y a-t-il un moyen de le faire jouer joliment avec le UpdatePanel et ce hack ASP.NET Web Forms appendTo()?

EDIT:

Déplacement de la commande $(this).parent().appendTo("form") de se produire une fois à pageLoad au lieu de chaque fois que la boîte de dialogue ouvre ne résoudre le problème. Toutefois, si la boîte de dialogue est ouvert avec une commande à partir du code-behind comme ce qui suit, le div saute du form nouveau:

ScriptManager.RegisterStartupScript(Me, Me.GetType, "Show", "showDialog();", True) 

À ce stade, il ressemble à un bug avec RegisterStartupScript! Est-il une solution de contournement pour injecter JavaScript à partir du code-behind qui ne déplace pas div de ma boîte de dialogue? Dans ce cas, je lance le code côté serveur pour décider si la boîte de dialogue doit être affichée, donc je ne peux pas simplement utiliser .click() de jQuery pour lier la boîte de dialogue au bouton. Il doit être conditionnel basé sur des calculs par code.

+0

Quelle est la showDialog(); fonction? est-ce la même chose que le showMessageSentDialog(); fonction? –

+0

Oui, même chose. – ChessWhiz

Répondre

0

Prenez

$(this).parent().appendTo("form"); 

et le placer comme celui-ci

$(function() { 
    var dlg = $("#messageSentDialog").dialog({ 
     bgiframe: true, 
     autoOpen: false, 
     draggable: false, 
     resizable: false, 
     modal: true,    
     show: 'blind', 
     buttons: { 
      Ok: function() { 
       $(this).dialog('close'); 
      } 
     } 
    }); 
    dlg.parent().appendTo("form"); 
}); 

function showMessageSentDialog() {  
    $("#messageSentDialog").dialog("open"); 
} 

$(function() { 
    showMessageSentDialog(); 
}); 

tripoté here

+0

Votre message m'a vraiment troublé, puisque j'avais déjà essayé. Cependant, j'ai maintenant identifié le problème. Même si cela fonctionne sur jsFiddle, cela ne fonctionne pas dans mon application, car j'injecte l'appel .dialog() via RegisterStartupScript d'ASP.NET, ce qui déplace le div hors du formulaire. Voir ma modification. – ChessWhiz