2009-08-16 9 views
5

Na mojej stronie mam następujący kontrolę użytkownika:ASP.NET oraz jQuery dialogowe

<div class="editFormDialog" style="display: none; font-size: 12px;"> 
    <mm:Form ID="editUC" ShowCreateButton="false" ShowEditButton="true" runat="server" /> 
</div> 

Ten UC ma własność publiczną, która przyjmuje DataSet i aktualizuje niektóre pola w UC.

Po naciśnięciu przycisku na mojej stronie wywoływana jest ta właściwość w UC, a UC jest aktualizowany danymi z DataSet.

Jak dotąd tak dobrze. Problem powstaje, gdy chcę, aby UC było dialogiem jQuery UI.

Najpierw tworzę okno:

$(document).ready(function() { 
    $('.editFormDialog').dialog({ 
     autoOpen: false, 
     height: 700, 
     width: 780, 
     modal: true, 
     bgiframe: true, 
     title: 'Rediger', 
     open: function(type, data) { 
      $(this).parent().appendTo("form"); 
      $(this).css('display', 'block'); 
     } 
    }); 
}); 

I wa go otworzyć na przycisk (nie jest to przycisk ASP.NET, zwykły HTML):

$('#btnEdit').live('click', function() { 
    $('.editFormDialog').dialog('open'); 
}); 

Otworzy się okno dialogowe, ale UC nie zawiera poprawnych danych. Po załadowaniu strony, UC jest aktualizowane z danymi domyślnymi. Następnie użytkownik klika przycisk, a dane zmieniają się, ale UC nie jest aktualizowany. Wciąż zawiera dane domyślne. To jest problem.

Czy masz pojęcie, dlaczego?

Pomoc zostanie doceniona!

Odpowiedz

1

Dokładnie, co się stanie, gdy "zadzwonisz do nieruchomości" (przypuszczam, że masz na myśli, że to metoda)? Czy strona wykonuje odświeżenie? Jeśli tak jest w rzeczywistości, może odświeżenie jest jakoś zablokowane, gdy miksujesz jQuery do scenariusza?

+0

Klikam przycisk, aby uzyskać następne dane. Pojawia się odświeżenie. Właściwość w UC jest ustawiona jako "editUC.EditData = ds;".Strona wyświetla nowe dane. Teraz po kliknięciu innego przycisku, który powoduje wyskakujące okno dialogowe, UC nadal zawiera dane domyślne. Jakby nie zarejestrował zmian w jego źródle danych. Ale jeśli wyświetlam UC poza oknem dialogowym, działa idealnie. –

+0

To brzmi dziwnie: Czy mógłbyś dodać więcej kodu źródłowego? –

+0

Wszystko jest umieszczone wewnątrz panelu aktualizacji. Czy może to być, gdy utworzę okno dialogowe, zostanie ono "przeniesione na zewnątrz" do panelu aktualizacji? Może innym rozwiązaniem może być utworzenie okna dialogowego za każdym razem, gdy zostanie otwarte, a następnie usunięcie go po zamknięciu? Oczywiście umieszczenie elementów HTML we właściwym miejscu. Ale jak mogę to zrobić? –

0

Od kiedy korzystasz z paneli aktualizacji, w jaki sposób wstrzykujesz połączenie do javascript na stronie? Pytam, ponieważ istnieje tylko jeden sposób, który działa poprawnie w częściowych postbackach: ScriptManager.RegisterStartupScript(). To pozwala skryptowi javascript działać tak, jakby strona została załadowana. Oczywiście można również nazwać dowolny inny javascript onload, który może spowodować zachowanie, które widzisz.

Więc

  1. upewnij się, że twój JavaScript jest wstrzykiwany z menedżerem skryptu.
  2. upewnij się tylko fragmenty javascript, które chcesz wykonać po częściowym odświeżenie strony są wykonany

Istnieje również możliwość włączenia swoją UC w ajax kontroli z usługi internetowej, aby zmienić źródło danych . Nigdy więcej częściowych postbacków, które zazwyczaj poprawiają responsywność strony.

2

Znalazłem rozwiązanie dla tego problemu. Okazuje się, że kiedy dołączyć do formularza, trzeba upewnić się, że fragment kodu jest wewnątrz dokumentu jquery gotowy:

$("#dialog1").parent().appendTo($("form:first")); 

Więc cała sprawa powinna wyglądać następująco:

jQuery(document).ready(function() { 
    $("#<%=myFamilyGrid.ClientID %>").tablesorter({ 
     sortList: [[0, 1]] 
    }) 
     .tablesorterPager({ container: $("#pager") }); 


    $("#dialog1").dialog({ 
     modal: true, 
     height: 370, 
     width: "350px", 
     autoOpen: false, 
     bgiframe: false, 
     zIndex: 3999 
    }); 

    $("#dialog1").parent().appendTo($("form:first")); 
}); 

Nadzieja to pomaga!

Powiązane problemy