2012-09-20 10 views
5

W aplikacji sieci Web ASP.NET 4.0, mam kontrolę użytkownika, która jest opakowana przez UpdatePanel (zobacz poniższy kod).Jak wymusić przycisk wykonać pełny odświeżenie zamiast asynchronicznego oddzwonienia

<asp:UpdatePanel ID="UpdatePanel5" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <UC:MyCustomCtrl ID="customCtrl" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Oczywiście, to działa świetnie na każdej kontroli ASP.NET, która powoduje odświeżenie strony w moją kontrolą użytkownika, ponieważ to sprawia, że ​​pojawić się asynchronicznie. Jednak, jest jeden proces, który nie działa!

Mam przycisk ASP.NET (Utwórz raport) w formancie użytkownika, który wysyła asymetryczne żądanie do serwera. Następnie serwer tworzy arkusz kalkulacyjny Excela, a następnie umieszcza arkusz kalkulacyjny w HttpResponse, aby wysłać go do przeglądarki klienta, aby mógł je otworzyć/zapisać. Jednak w tym momencie wysypuje się, ponieważ żądanie do serwera jest asynchroniczne i najwyraźniej nie można umieścić binarnego w HttpResponse podczas asynchronicznego żądania.

Jak sobie z tym poradzić?

Odpowiedz

11

Rejestr ten przycisk jako synchronicznego sterowania ogłaszania w Page_Load sposób sterowania użytkownika: ScriptManager.GetCurrent(Page).RegisterPostBackControl(CreateReportButton);

+0

Dzięki. Niedawno dotarłem do podobnej odpowiedzi. Ale to w gruncie rzeczy to samo - zarejestruj kontrolkę za pomocą ScriptManager. W moim przypadku obejmuje to znalezienie kontroli nad kontrolą użytkownika, a następnie zarejestrowanie jej za pomocą ScriptManager. – Jagd

0

Użyj wyzwalaczy w panelu aktualizacji, aby odwołać się do formantu niestandardowego i zdarzenia zarejestrowanego na przycisku raportu w formancie, np.

<Triggers> 
    <asp:PostBackTrigger ControlID="customCtrl" EventName="ReportButtonClicked" /> 
</Triggers> 
+0

Próbowałem już tego. Przycisk znajduje się w niestandardowej kontrolce, a próba użycia nazwy przycisku jako wyzwalacza nawet nie będzie się kompilować. – Jagd

+0

W prawo, będzie musiał zarejestrować zdarzenie w niestandardowej kontroli, a następnie odwołać się w ten sposób, będzie edytować. – Turnkey

0

można dodać wyzwalacze do UpdatePanels, które pozwalają na pełny post z powrotem. oto przykład

<asp:UpdatePanel ID="UpdatePanel5" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <UC:MyCustomCtrl ID="customCtrl" runat="server" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="btnID" /> 
    </Triggers> 
</asp:UpdatePanel> 
+0

Próbowałem już tego. Przycisk znajduje się w niestandardowej kontrolce, a próba użycia nazwy przycisku jako wyzwalacza nawet nie będzie się kompilować. – Jagd

+0

Czy możliwe jest przeniesienie tej konkretnej kontroli użytkownika z panelu aktualizacji? –

0

podobne do odpowiedzi Erica. Nie próbowałem tego, ale może pracować ...

<asp:UpdatePanel ID="UpdatePanel5" runat="server"> 
    <ContentTemplate> 
     <UC:MyCustomCtrl ID="customCtrl" runat="server" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="customCtrl$btnID" /> 
    </Triggers> 
</asp:UpdatePanel> 

Zrobiłem coś podobnego do tego jakiś czas temu do kontroli poprawności, więc wydaje się logiczne, że pracują tu.

Skorzystaj z przeglądarki DOM (korzystam z Inspektora elementów Chrome) i sprawdź, "NAME" Twojego przycisku (nie ID). A zaczynając od części zawierającej ogólną nazwę użytkownika, użyj reszty.

Powiązane problemy