Nasıl Asp.Net AJAX UpdatePanel sonra belgeyi CDHtmlDialog almak

oy
1

Bizim CDHtmlDialog görüntülenen sayfa bir Asp.Net AJAX UpdatePanel yaptığında bir gezinme olayı olsun, ama bundan sonra her şey kaybetmiş gibi görünüyor. Biz artık bir belge varsa veya sayfadaki herhangi bir fare olayları alamadım.

Oluştur 10/12/2008 saat 00:25
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Ben Kayıtlı olmayan bir kullanıcı olarak orijinal yayını yapılan, bu yüzden düzenleyebileceğim sanmıyorum gibi görünüyor. Biz orijinal soruna geçici başardık, ancak (gerçekten CDHTMLDialog nefret etmeye başlayarak) farklı bir bağlamda yeniden gündeme geldi.

İşte sorunun nedeni:
JavaScript aramalar gidin olayı neden olduğunu ve CDHtmlDialog :: OnBeforeNavigate denilen ve bağlantıyı keser ve ıhtmldocument2 siler alır. Ne yazık ki sayfa hiç değişmedi beri gerçek bir gezinin değil. Bu CDHtmlDialog :: OnNavigateComplete geri belgeyi almak için asla denir anlamına gelir.

Ben bulmak OnBeforeNavigate ben CDHtmlDialog :: geçersiz olduğunda da kötüsü, URL dizesi okunmaz (bug) nedir?

En basit (? Iyi) çözüm:
Biz URL bir javascript eylem değilse CDHtmlDialog en _OnBeforeNavigate2 çağrı sadece gidin Etkinlikten önce müdahale ve gerekir:

BEGIN_EVENTSINK_MAP(CMyHTMLDlg, CDHtmlDialog)
    ON_EVENT(CMyHTMLDlg, AFX_IDC_BROWSER, DISPID_BEFORENAVIGATE2, OnBeforeNavigate2, VTS_DISPATCH VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_PBOOL)
END_EVENTSINK_MAP()

void CMyHTMLDlg::OnBeforeNavigate2(LPDISPATCH pDisp, VARIANT* URL,VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData,VARIANT* Headers, BOOL* Cancel)
{

    ...

    if (URL != NULL)
    {
        // Check if navigation is to a folder..
        CString url = CString(*URL);

        if(url.Left(11) != _T("javascript:"))
        {
            _OnBeforeNavigate2(pDisp, URL, Flags, TargetFrameName, PostData, Headers, (BOOL*)Cancel);
            // If dynamic linking MFC then the above handler doesn't exist. Need to call OnBeforeNavigate direct. 
            // This is from a code site, and it compiles, but I've never tested it to see if it works.
            //CDHtmlDialog::OnBeforeNavigate(pDisp,(LPCSTR)URL);
        }
    }
}

Bunun büyük kısmı bir CDHtmlDialog alt sınıfı kurmak için oldukça standart olduğunu ve aslında oldukça basit, ama JavaScript kodları anlamaya beni biraz sürdü. Ne yazık ki, JavaScript sayfanın kendisine dinamik değişiklik yaparken bu nasıl çalışacağını emin değilim.

Bazı notlar:

  • Navigasyon tamamen burada iptal edilmesi gerekiyorsa, o zaman * = DOĞRU İptal kurmak ve _OnBeforeNavigate2 demiyorlar. Bu da herhangi bir JavaScript eylemleri iptal çünkü burada dikkatli olun.
  • Ben görene kadar bu belli değildi kaynağını , ama CDHtmlDialog :: _ OnBeforeNavigate2 sadece CDHtmlDialog :: OnBeforeNavigate çağırır.
Cevap 02/02/2009 saat 18:34
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more