Eksperci miesiąca

1
grzegorz.tworek
Senior
miesiąc
33
łącznie
814
2
dbsoft
Gość
miesiąc
29
łącznie
38
3
burzak
Guru
miesiąc
28
łącznie
1086
4
styrni
Top10
miesiąc
21
łącznie
4101
5
Bulax
Senior
miesiąc
21
łącznie
589

Z blogów MVP

Microsoft w Polsce

Statystyka

  • W tej chwili mamy:
    104 czytelników online
    58 605 zarejestrowanych
  • Do dziś zanotowaliśmy:
    46 038 483 odsłon
    65 689 odsłon / 24h
Microsoft Most Valuable Professional

Forum - Wątek

Idź do grupy:
Widok:
Autor

Wątek


Optimus_Prime
Junior

wypowiedzi: 108
od: 2010-01-20
UpdatePanel programowe dodawania triggers'a 2010-03-16 (Wt) 18:12

Witam. Mam częśc stronki asp.net w której znajdują sie przyciski tworzenie podaczas ładowania zaleznie od określonych reguł (czyli przycisk moze sie pojawić na stronei lub nie). Poniżej panelu z przysickami mam update panel z TreeView. W metodzie PageLoad jeśli dany przycisk ma być wyświetlony to porgramowo dodaje go do triggersów ponizszego UpdatePanelu. I teraz jeśli klikne go raz to panel sie odświezy, jesli klikne go drugi raz strona zostanie przaładowana. Chodzi mi o to aby całośc działało w AJAX'ie, aby strona łądowała sie tylko raz. Próbowałem dodawać go do triggersów ponownie w jego metodzie Click ale to nie działa. Strona sie przałdowuje po dwukrotnym kliknieciu. Jak zrobić (programowo) aby na stałe dany przycisk sie znajdował w triggersach UpdatePanela? Z góry dzieki za odpowiedź.

Zaloguj się, żeby odpowiedzieć

simman
Gość

wypowiedzi: 34
od: 2010-03-12

Odp: UpdatePanel programowe dodawania triggers'a 2010-03-16 (Wt) 20:58

Nie znam się na tyle by mieć pewność że ci dobrze podpowiem. Jednak z tego co rozumiesz chcesz by przycisk zawsze sie łądował. Nie znam kodu ale uważam że przycisk powinien być Page load i nie może mieć żadnych IF i nie może mieć takżę ustawione. Nie jestem pewien ale Visible znaczy widoczność na false bo przyjmuje dwa parametry true lub false ale mówie czysto teoretycznie bo nie widze jak to wygląda.

Zaloguj się, żeby odpowiedzieć

Optimus_Prime
Junior

wypowiedzi: 108
od: 2010-01-20


Odp: UpdatePanel programowe dodawania triggers'a 2010-03-16 (Wt) 21:31

uproszczony kod strony

 

void PageLoad()

{

if (warunek1)

{

Button btn1  = new Button();

.

.

this.Master.Panel.Controls.Add(btn1);

AsyncPostBack async = new AsyncPostBack();

async.ControlID = btn1.ID;

async.EventName = "Click";

this.UpdatePanel.Triggers.Add(async);

}

if(warunek2)

{

to samo dla kolejnego przysicku

}

}

 

kod pisze zgłowy wiec moze nie być poprawny składniowo. po załadowaniu strony pojawiają sie te przysicki których warunek był prawdziwy. chce aby klikjnięcie ich było wykonywane bez ponownego przaładowywania strony. to działa ale tylko po jednarazowym (może dwukrotnym) naciśnieciu danego buttona. potem strona zostaje przałdowana i przyciski znikają. jak sprawić aby pozostały przez cały czas w triggersach UpdatePanelu?

Zaloguj się, żeby odpowiedzieć

simman
Gość

wypowiedzi: 34
od: 2010-03-12



Odp: UpdatePanel programowe dodawania triggers'a 2010-03-16 (Wt) 21:48

Polecam timerka co jakiś czas będzie ci robił refresh.

 

tutaj kod timerka interval oznacza co ile ma odswiezać :

<asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="10000" />
<asp:Label ID="OriginalTime" runat="server"></asp:Label>

 

 

wstaw tutaj to co chciałeś.

tutaj pokaze ci przyklad jak odswieża czas:

 

protected void Timer1_Tick(object sender, EventArgs e)
{

OriginalTime.Text = DateTime.Now.ToLongTimeString();
}

 

Jeśli ci pomogłem zaznacz pomógł i skończ temat jeśli nie pytaj dalej może ktoś inny pomoże lepiej.

 

//dobra ide dalej oglądać Harego Pottera hehe

 


Edytowany 1 raz, ostatnio 2010-03-16 21:49 przez simman
Zaloguj się, żeby odpowiedzieć

digman
Junior

wypowiedzi: 132
od: 2010-01-21



Odp: UpdatePanel programowe dodawania triggers'a 2010-03-17 (Śr) 12:56

Najlepiej byś zrobił, jakbyś przeanalizował kod krok po kroku jak zachowa się (i którędy będzie "szedł") przy 1 i przy 2 kliknięciu.

 

Moim zdaniem za kolejnym razem warunek dodawania przycisków nie jest spełniony (mozę masz tak gdzieś !Page.IsPostBack?). Żeby te przyciski poprawnie funkcjonowały musisz je za każdym razem (przy każdym postbacku) dodawać do strony.

 

Ogólnie radziłbym Ci trochę inny sposób. Dodaj te przyciski normalnie na stronie aspx i w warunkach ustawiaj visible tych przycisków.

 

Najlepiej, jakbyś dokłądniej kod wkleił, wtedy będzie łatwiej zdiagnozować problem.

 

 

A, i daruj sobie jakieś timerki czy inny wesołe pomysły:)

 

Przykład prostego kodu z dynamicznie ładowanymi przyciskami, które działają tak, jak byś chciał.

ASPX.

<asp:UpdatePanel ID="upTest" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="pnlText" runat="server"></asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>

C#

protected void Page_Load(object sender, EventArgs e)
{
if (true)
{
Button btn = new Button();
btn.Text = "kliknij";
pnlText.Controls.Add(btn);
}
}


Edytowany 1 raz, ostatnio 2010-03-17 13:01 przez digman
Zaloguj się, żeby odpowiedzieć

andrew_sz
Senior

wypowiedzi: 698
od: 2010-01-21



Odp: UpdatePanel programowe dodawania triggers'a 2010-03-17 (Śr) 20:29

Ok to może ja teraz zabłysnę, dodawanie triggerów powinieneś zrobić przed zakończeniem Init strony - najpóźniej, inaczej nie zadziała. Tu mały demo kodzik:

[Kod]
protected override void OnInit(EventArgs e)
        {
            base.OnInit(e); 

            Button b = new Button();
            b.ID = "b1";

            this.Panel1.Controls.Add(b);

            AsyncPostBackTrigger async = new AsyncPostBackTrigger();

            async.ControlID = b.ID;
            async.EventName = "Click";

            UpdatePanel1.Triggers.Add(async);
           
        }

Tradycyjnie radzę ignorować simman, bo on nie ma żadnego pojęcia, ani doświadczenia, a już widzę za doradzanie się wziął SIC! :s, z resztą po jego postach widać, że lepiej unikać jego "rad".

 

Pozdro i poproszę piwo.


Edytowany 1 raz, ostatnio 2010-03-17 20:30 przez andrew_sz
Zaloguj się, żeby odpowiedzieć

Optimus_Prime
Junior

wypowiedzi: 108
od: 2010-01-20




Odp: UpdatePanel programowe dodawania triggers'a 2010-03-17 (Śr) 21:46

Też myślalem o zmianie właściwości Visible. Przanalizowałem kod krok po korku przez zapytaniem sie na formu.

 

Spróbuje z OnInit.

Dzięki za odp.

 

P.S. Pana do Timerka wiadomo ze ignoruje :). Czytałem troche na forum i zdązyłem sie już zorietnować co do za typ/

Zaloguj się, żeby odpowiedzieć

Optimus_Prime
Junior

wypowiedzi: 108
od: 2010-01-20




Odp: UpdatePanel programowe dodawania triggers'a 2010-03-22 (Pn) 10:39

Jeśli panel do któego dodajemy kontrolki jest na ContentPage to kod działa, natomiast jeśli jest na Master to nie chce działać. Kontrolki sie nie dodają do strony. Aja mam własnie master i contentpage. Czy można zrobic aby to zadziałało?

Zaloguj się, żeby odpowiedzieć

andrew_sz
Senior

wypowiedzi: 698
od: 2010-01-21





Odp: UpdatePanel programowe dodawania triggers'a 2010-03-22 (Pn) 12:47

Dla masterpage kod jest ten sam, więc musisz coś robić źle.


--

Pomógł ? To go oznacz!

Zaloguj się, żeby odpowiedzieć

Optimus_Prime
Junior

wypowiedzi: 108
od: 2010-01-20






Odp: UpdatePanel programowe dodawania triggers'a 2010-03-22 (Pn) 13:10

robie tak samo tylko zamiast this.Panle.Controls.Add(btn) robie this.Master.Panel.Controls.Add(btn) w tym przypadku przycisk sie nie dodaje do strony a gdy chce dodać triggera wywala bład ze nie znalazł przycisku.

Zaloguj się, żeby odpowiedzieć

andrew_sz
Senior

wypowiedzi: 698
od: 2010-01-21







Odp: UpdatePanel programowe dodawania triggers'a 2010-03-22 (Pn) 13:37

A to Ty dodajesz kontrolki na master page z poziomu contentpage, cóż takiej opcji nie testowałem, jak chcesz do prześlij jakoś źródła, może coś zdziałam.


--

Pomógł ? To go oznacz!

Zaloguj się, żeby odpowiedzieć